如何判断每天的时间段

caixrz 2009-03-02 08:12:00
有两个日期字段 StartDate EndDate
2008-03-01 08:30:00 2008-12- 12 19:30:30




意思是自2008-03-01 08:30:00 至 2008-12- 12 19:30:30 每天8:30-19:30 之间合法

怎么判断2008 06 21 18:30 是不是合法?
...全文
119 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovezx1028 2009-03-03
  • 打赏
  • 举报
回复
收藏加学习啦
htl258_Tony 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ChinaJiaBing 的回复:]
SQL code

if OBJECT_ID('pro_j')is not null
drop procedure pro_j
go
create procedure pro_j
(@date datetime)
as
begin
declare @startDate datetime,@enddate datetime
set @startDate='2008-03-01 08:30:00'
set @enddate='2008-12-12 19:30:30'
if @date>=@startDate and @date<=@enddate
print '合法'
else
print '不合法'
end
go
exec pro_j '2008 06 21 18:30'

----合法
[/Quote]exec pro_j '2008 06 21 21:30' 还是合法,所以这是不可取的.
htl258_Tony 2009-03-02
  • 打赏
  • 举报
回复
-->借用DAWUGUI的代码:
declare @StartDate as datetime
declare @EndDate as datetime
set @StartDate = '2008-03-01 08:30:00'
set @EndDate = '2008-12- 12 19:30:30'

declare @Date as datetime
set @date = '2008-06-21 18:30:00'

if datediff(day,0,@date) between datediff(day,0,@StartDate) and datediff(day,0,@EndDate) and
dateadd(day,-datediff(day,0,@Date),@Date) between dateadd(day,-datediff(day,0,@StartDate),@StartDate) and dateadd(day,-datediff(day,0,@EndDate),@EndDate)
print '合法'
else
print '不合法'

--result
/*
合法
*/
ChinaJiaBing 2009-03-02
  • 打赏
  • 举报
回复


if OBJECT_ID('pro_j')is not null
drop procedure pro_j
go
create procedure pro_j
(@date datetime)
as
begin
declare @startDate datetime,@enddate datetime
set @startDate='2008-03-01 08:30:00'
set @enddate='2008-12-12 19:30:30'
if @date>=@startDate and @date<=@enddate
print '合法'
else
print '不合法'
end
go
exec pro_j '2008 06 21 18:30'

----合法

ChinaJiaBing 2009-03-02
  • 打赏
  • 举报
回复


if OBJECT_ID('pro_j')is not null
drop procedure pro_j
go
create procedure pro_j
(@date datetime)
as
begin
declare @startDate datetime,@enddate datetime
set @startDate='2008-03-01 08:30:00'
set @enddate='2008-12-12 19:30:30'
if @date>=@startDate and @date<=@enddate
print '合法'
else
print '不合法'
end
go
exec pro_j '2008 06 21 18:30'

----合法

dawugui 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 caixrz 的帖子:]
有两个日期字段 StartDate EndDate
2008-03-01 08:30:00 2008-12- 12 19:30:30


意思是自2008-03-01 08:30:00 至 2008-12- 12 19:30:30 每天8:30-19:30 之间合法

怎么判断2008 06 21 18:30 是不是合法?
[/Quote]
declare @StartDate as datetime
declare @EndDate as datetime
set @StartDate = '2008-03-01 08:30:00'
set @EndDate = '2008-12- 12 19:30:30'

declare @Date as datetime
set @date = '2008-06-21 18:30:00'

if convert(varchar(10),@date,120) between convert(varchar(10),@StartDate,120) and convert(varchar(10),@EndDate,120) and
convert(varchar(8),@date,114) between convert(varchar(8),@StartDate,114) and convert(varchar(8),@EndDate,114)
print '合法'
else
print '不合法'

--result
/*
合法
*/


ws_hgo 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 caixrz 的帖子:]
有两个日期字段 StartDate EndDate
2008-03-01 08:30:00 2008-12- 12 19:30:30


意思是自2008-03-01 08:30:00 至 2008-12- 12 19:30:30 每天8:30-19:30 之间合法

怎么判断2008 06 21 18:30 是不是合法?
[/Quote]

declare @StartTime datetime
declare @EndTime datetime
declare @Date datetime
set @Date='2008 06 21 18:30'
set @StartTime ='2008-03-01 08:30:00'
set @EndTime='2008-12- 12 19:30:30'

while Exists (select * from tb where @Date between StartTime and @EndTime)
begin
print '合法'
end
readfuture 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 josy 的回复:]
把时间改为 2008-06-21 20:30 测试
SQL code

declare @date datetime
set @date='2008-06-21 20:30'
if exists(select *
from tb
where @date between startdate and enddate
and convert(char(8),@date,108) between convert(char(8),StartDate,108) and convert(char(8),EndDate,108))
print '合法'
else
print '不合法'

/**

不合法

**/


[/Quote]
同意
-狙击手- 2009-03-02
  • 打赏
  • 举报
回复
declare @date datetime 
set @date='2008-06-21 18:30'

select *
from tb
where [StartDate] < @date and @date < [EndDate]
you_tube 2009-03-02
  • 打赏
  • 举报
回复

借用楼上数据
DECLARE @tab table([StartDate] datetime,[EndDate] datetime)
insert @tab
select '2008-03-01 08:30:00','2008-12-12 19:30:30'

declare @date datetime
set @date='2008-06-21 18:30'

IF EXISTS(
select *
from @tab
where @date BETWEEN startdate and enddate
and convert(int,@date,108) >= convert(int,StartDate,108) and convert(int,@date,108) <= convert(int,EndDate,108))
print '合法'
else
print '不合法'

(1 行受影响)
合法

sdhdy 2009-03-02
  • 打赏
  • 举报
回复
--用这个取时间
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
htl258_Tony 2009-03-02
  • 打赏
  • 举报
回复
SORRY,看错.我试一下.
百年树人 2009-03-02
  • 打赏
  • 举报
回复
把时间改为 2008-06-21 20:30 测试

declare @date datetime
set @date='2008-06-21 20:30'
if exists(select *
from tb
where @date between startdate and enddate
and convert(char(8),@date,108) between convert(char(8),StartDate,108) and convert(char(8),EndDate,108))
print '合法'
else
print '不合法'

/**

不合法

**/
百年树人 2009-03-02
  • 打赏
  • 举报
回复

if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([StartDate] datetime,[EndDate] datetime)
insert [tb]
select '2008-03-01 08:30:00','2008-12-12 19:30:30'

declare @date datetime
set @date='2008-06-21 18:30'
if exists(select *
from tb
where @date between startdate and enddate
and convert(char(8),@date,108) between convert(char(8),StartDate,108) and convert(char(8),EndDate,108))
print '合法'
else
print '不合法'

/**

合法

**/
htl258_Tony 2009-03-02
  • 打赏
  • 举报
回复
怎么判断2008 06 21 18:30在那个范围内,为什么不合法呢?

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧