sql语句日期比较
‘壹’ sql 语句中如何比较当前时间与指定时间是否相同
代码的思路:
两个时间的相差的秒数,当等于0时,说明两日期相同。
getdate()表示获取当前系统时间
sql 语句中比较当前时间与指定时间是否相同参考代码如下:
select datediff(second,'2012-12-15 16:54:00',getdate())
(1)sql语句日期比较扩展阅读:
GETDATE() 函数从 SQL Server 返回当前的时间和日期。
语法:GETDATE()
实例如下
使用下面的 SELECT 语句:
SELECT GETDATE() AS CurrentDateTime
结果:
CurrentDateTime
2008-12-29 16:25:46.635
注释:上面的时间部分精确到毫秒。
‘贰’ SQL语句 怎样比较两个日期的大小
惯例,在等号左边尽量不要有对字段的运算,所以一般用法有:
1、判断其是否在某个日期区间:
Where CheckDate Between '2013-01-01' And '2013-01-31'
这个方法也可用于加几天是多少,或减几天是多少:
把起迄日期参数化,原CheckDate要加的,那就变成@BeginDate加,减也同理~
2、判断其是否大于某天:
Where CheckDate >'2013-01-01' 或大于等于:Where CheckDate >='2013-01-01'
小于某天
Where CheckDate <'2013-01-01' 或小于等于:Where CheckDate <='2013-01-01'
3、判断其是否等于某天:
如果Check字段不带时间,只是年月日,那直接等于就可以了;
Where CheckDate ='2013-01-01'
如果CheckDate字段是携带时间的就会有差别;这一点,在上述所有方法中都需要注意
eg:CheckDate 实际存储值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000
这时直接用上面的等号是抓不到的,因此或改写成:
Where CheckDate >= '2013-01-01' And CheckDate < '2013-01-02'
当然也可以把'2013-01-01',定义为参数@Date DateTime
Where CheckDate >= @Date And CheckDate < @Date+1
不建议在等号左边使用函数或计算对表字段进行计算。
以上是两个日期的判断,另外有些日期处理函数可以了解一下:
DATEDIFF ( datepart , startdate , enddate )
返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。
eg:
Select DateDiff(DAY,'20130101','20130105')
1号到5号相差4天,输出结果为4
常用的datepart 有:
datepart 缩写
year yy, yyyy 年
month mm, m 月
day dd, d 日
week wk, ww 周
hour hh 时
minute mi, n 分
second ss, s 秒
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。
eg:
Select DATEADD(DAY,1,'20130101')
1号加1天就是2号;输出结果为 ‘2013-01-02’
Number可以是负数就变成减几天
DATEADD(datepart, number, date)
将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。
eg:
Select DATEPART(DAY,'20130101')
返回datepart描述的部分,输出结果为 1
‘叁’ sql语句中怎样比较两个日期的大小
个人感觉用不等号比较日期非常不可取,应该用datediff函数,关于该函数的具体使用说明见sql server帮助。这个函数可以在sql语句中使用——如果直接用不等号就能比较日期,sql语法中干吗还要定义这个函数呢?所以,使用datediff是比较日期的最科学的方法。
以下是我从sql server帮助中摘录的部分,你也可以直接查看sql server帮助。
DATEDIFF
返回跨两个指定日期的日期和时间边界数。
语法
DATEDIFF ( datepart , startdate , enddate )
参数
datepart
是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。
日期部分 缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
startdate
是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。
如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。
有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。
enddate
是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
返回类型
integer
注释
startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。
当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。
计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之间的星期数是 1。
示例
此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。
USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO