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

如题所述

惯例,在等号左边尽量不要有对字段的运算,所以一般用法有:\x0d\x0a\x0d\x0a1、判断其是否在某个日期区间:\x0d\x0aWhere CheckDate Between '2013-01-01And '2013-01-31'\x0d\x0a这个方法也可用于加几天是多少,或减几天是多少: \x0d\x0a把起迄日期参数化,原CheckDate要加的,那就变成@BeginDate加,减也同理~\x0d\x0a\x0d\x0a2、判断其是否大于某天:\x0d\x0aWhere CheckDate >'2013-01-01或大于等于:Where CheckDate >='2013-01-01'\x0d\x0a小于某天\x0d\x0aWhere CheckDate <'2013-01-01或小于等于:Where CheckDate <='2013-01-01'\x0d\x0a\x0d\x0a3、判断其是否等于某天:\x0d\x0a如果Check字段不带时间,只是年月日,那直接等于就可以了;\x0d\x0aWhere CheckDate ='2013-01-01'\x0d\x0a\x0d\x0a如果CheckDate字段是携带时间的就会有差别;这一点,在上述所有方法中都需要注意\x0d\x0aeg:CheckDate 实际存储值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000\x0d\x0a这时直接用上面的等号是抓不到的,因此或改写成:\x0d\x0aWhere CheckDate >= '2013-01-01And CheckDate < '2013-01-02'\x0d\x0a当然也可以把'2013-01-01',定义为参数@Date DateTime\x0d\x0aWhere CheckDate >= @Date And CheckDate < @Date+1\x0d\x0a\x0d\x0a不建议在等号左边使用函数或计算对表字段进行计算。\x0d\x0a\x0d\x0a以上是两个日期的判断,另外有些日期处理函数可以了解一下:\x0d\x0a\x0d\x0aDATEDIFF ( datepart , startdate , enddate )\x0d\x0a返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。\x0d\x0aeg:\x0d\x0aSelect DateDiff(DAY,'20130101','20130105') \x0d\x0a1号到5号相差4天,输出结果为4\x0d\x0a\x0d\x0a常用的datepart 有: \x0d\x0adatepart 缩写 \x0d\x0ayear yy, yyyy 年\x0d\x0amonth mm, m 月 \x0d\x0aday dd, d 日\x0d\x0aweek wk, ww 周\x0d\x0ahour hh 时\x0d\x0aminute mi, n 分\x0d\x0asecond ss, s 秒 \x0d\x0a\x0d\x0aDATEADD(datepart, number, date)\x0d\x0a\x0d\x0a将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。\x0d\x0aeg:\x0d\x0aSelect DATEADD(DAY,1,'20130101') \x0d\x0a 1号加1天就是2号;输出结果为 ‘2013-01-02’\x0d\x0aNumber可以是负数就变成减几天\x0d\x0a\x0d\x0aDATEADD(datepart, number, date)\x0d\x0a\x0d\x0a将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。number 参数的值必须为整数,而 date 参数的取值必须为有效日期。\x0d\x0aeg:\x0d\x0aSelect DATEPART(DAY,'20130101')\x0d\x0a返回datepart描述的部分,输出结果为 1
温馨提示:答案为网友推荐,仅供参考