Ⅰ sql日期比较大小
要用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 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。
对于更小的时间单位存在溢出值:
milliseconds 24 天
seconds 68 年
minutes 4083 年
others 没有溢出限制
如果超出这些限制,此函数将返回溢出错误。
标准和兼容性 SQL/92 Transact-SQL 扩展。
SQL/99 Transact-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' )
Ⅱ 知识积累之怎样在SQL语句中比较两个字符串类型时间
1、合理的做法是先转换成日期类型,再比较;
2、但有时也可以利用字符串进行比较,如
SELECT Count(*)
FROM Orders
WHERE BizDate > '2016-01-01' -- 注意,日期的字符串格式2者要匹配,否则可能得不到正确的结果。
Ⅲ sql中的文本类型日期如何比较大小
不知你比较,是想取出两者谁大谁小,还是取得两者之间的时间差
不管怎样,可以先把文本型转换成日期型:
CONVERT(DATETIME,'200909'+'01',112)
你这个文本类型没有天,转换时会有问题,所以默认给加了个天,112是日期格式,有多种,想了解,具体可以查一下有哪些格式
CONVERT(DATETIME,'20080504',112)
转换好两个日期,就可以比较了,比如用日期函数来比较两者相差天数:
SELECT
DATEDIFF(DAY,CONVERT(DATETIME,'20080504',112),CONVERT(DATETIME,'200909'+'01',112))
这样就比较出两者间相差天数了,日期函数DATEDIFF()用法自己可以去查找资料熟悉一下,有好多函数
Ⅳ SQL Server 中 关于时间 类型的区别
1、首先获取当前系统数据库的日期和时间,可以利用函数GETDATE(),select GETDATE();如下图所示。
Ⅳ sql存储过程中时分秒字符串怎么比较大小 如08:30:00 与13:00:00怎么比较
oracle 中字符串日期类型是可以直接比较的,如:
select * from scott.emp where '08:30:00'<'13:00:00'
但是如果你要用一张表中的时间字段进行比较时,必须使用to_date()函数,如:
select * from scott.emp where hiredate<to_date('2012.01.01 13:00:00','yyyy.mm.dd hh24:mi:ss')
Ⅵ sql中如何比较两个表的时间字段的大小
可以直接
a.a>b.b的啊
你怎么写的,,,
如果直接不行,,,
可以试下
cast(a.a as datetime)>cast(b.b as datetime)
再试下,,,不过正常来说直接第一种酒可以的
Ⅶ 在sql中的check约束中怎样比较两个时间类型的变量
use
ebook
create
table
testcheck
(
time1
datetime
,
time2
datetime
,
constraint
time1_time1
check(datediff(day,[time1],[time2])
>
0)
)
这样就可以了,让time2>time1.这个相当于access中的记录级有效性验证.但是奇怪,sqlserver中从没提出过字段级约束和记录级约束之类的概念,但它的作用和字段级有效性规则及记录级有效性规则类似。
如果你说的两个时间来自不同的表,那只有用触发器来制度约束了
Ⅷ 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