SQL语句 怎样比较两个日期的大小?

SQL语句 怎样比较两个日期的大小?,第1张

惯例,在等号左边尽量不要有对字段的运算,所以一般用法有:

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

日期就是一个实数,整数部分就是今天距1900-01-01那天的天数。小数部分表部时间

小时数=24*小数部分。 select

cast('1900-01-01

00:00:00.000'

as

datetime)

+

1.1

结果为1900-01-02

02:24:00.000 所以,直接比较大小就行了(where 日期字段1

>

日期字段1)。

要用SQL来比较日期大小可使用 DATEDIFF 函数 [日期和时间],该函数的功能:返回两个日期之间的间隔。

语法: DATEDIFF ( date-part, date-expression-1, date-expression-2 )

date-part : year | quarter | month | week | day | hour | minute | second | millisecond

参数 date-part指定要测量其间隔的日期部分。

有关日期部分的详细信息,请参见日期部分。

date-expression-1某一间隔的起始日期。从 date-expression-2 中减去该值,返回两个参数之间 date-parts 的天数。

date-expression-2某一间隔的结束日期。从该值中减去 Date-expression-1,返回两个参数之间 date-parts 的天数。

用法 此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。

当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。

当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。

当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。

当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。

对于更小的时间单位存在溢出值:

milliseconds24 天

seconds68 年

minutes4083 年

others没有溢出限制

如果超出这些限制,此函数将返回溢出错误。

标准和兼容性 SQL/92Transact-SQL 扩展。

SQL/99Transact-SQL 扩展。

Sybase与 Adaptive Server Enterprise 兼容。

下面示例的语句返回 1: SELECT datediff( hour, '4:00AM', '5:50AM' )

下面的语句返回 102: SELECT datediff( month, '1987/05/02', '1995/11/15' )

下面的语句返回 0: SELECT datediff( day, '00:00', '23:59' )

下面的语句返回 4: SELECT datediff( day,'1999/07/19 00:00','1999/07/23 23:59' )

下面的语句返回 0: SELECT datediff( month, '1999/07/19', '1999/07/23' )

下面的语句返回 1: SELECT datediff( month, '1999/07/19', '1999/08/23' )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9878842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存