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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句中怎样比较两个日期的大小???相关的知识,希望对你有一定的参考价值。

日期类型不能直接进行逻辑运算吗????
那又怎样来比较两个日期的大小呢????

我的程序是要在数据库中查询在某一个时间范围之内的数据,程序是这样的:
Dim rs,sqlstr,sy,sm,sd,ey,em,ed,Date_Start,Date_End

Date_Start=CDate(Trim(Request.Form("sy"))&"-"&Trim(Request.Form("sm"))&"-"&Trim(Request.Form("sd")))

Date_End=CDate(Trim(Request.Form("ey"))&"-"&Trim(Request.Form("em"))&"-"&Trim(Request.Form("ed")))

sqlstr="select*from DataBase where UserID='"Session("UserID")"' and reg_Date>='"&Date_Start&"' and reg_Date<='"&Date_End&"' order by reg_Date desc"

Set rs=Server.CreatObject("AdoDB.Recordset")
rs.open sqlstr,conn,1,1

可是就是不返回任何东西!着急!!
我也试过网上很多朋友的办法,都不行!
我是做的Access数据库,日期格式是yyyy-mm-dd

个人感觉用不等号比较日期非常不可取,应该用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
参考技术A sqlstr="select*from DataBase where UserID='"Session("UserID")"' and reg_Date Between'" & Date_Start & "' and '" & Date_End & "' order by reg_Date desc"

PLSQL中SQL语句怎样转换日期型函数为字符型?

目前需求:需要selcet where ENDDATE<'2014/01/01'
其中:ENDDATE是一个日期的字段名,而后面的2014/01/01是我要转换的日期,目前查到在数据中ENDDATE的属性如图所示:

在数据库中查的ENDDATE的显示数据如图所示:

紧急求助,谢!!
需要知道使用什么函数,可以将后面的20140101转换,或者将掐面的日期转换成字符串的形式都可以吧?试过很多函数,都不能用。

to_char函数可以将日期值格式化为字符串; to_date函数将字符串按指定格式转换成日期值。
在查询中, 将'2014/01/01'转换成日期值,然后再用作查询条件,这样会比较好。
select ... where enddate < to_date('2014/01/01', 'yyyy/mm/dd')
参考技术A select * from table t where to_char(t.ENDDATE,'yyyy/mm/dd')<'2014/01/01
其中,to_char是将日期转化成字符串的函数;yyyy/mm/dd是指定的日期格式。
参考技术B where to_char(ENDDATE,'yyyy/mm/dd')<'2014/01/01'

这样试试

参考技术C to_char(ENDDATE,'yyyy/mm/dd')

以上是关于sql语句中怎样比较两个日期的大小???的主要内容,如果未能解决你的问题,请参考以下文章

在Sql语句中怎样计算出两个日期的差值

在SQL语句中怎样对varchar型别的列进行数值大小的比较

sql语句关于时间与时间戳

SQL插入语句

SQL语句怎样查询一个范围

sql语句中日期时间类型怎么比较