在asp中如何写比较日期字段的SQL语句(access数据库)?
Set rs=Server.CreateObject("ADODB.RecordSet")
SQL="Select * From table "
IF Trim(CStr(BeginDate))<>"" then
SQL =SQL +" where Date>='"&CStr(BeginDate)&"'"
End IF
IF Trim(CStr(EndDate))<>"" then
SQL =SQL +" and Date <='"&CStr(EndDate)&"'"
End IF
SQL =SQL +" order by Date DESC"
set rs=conn.execute(sql)
IE的错误提示是:语法错误 (操作符丢失) .
请问上面的比较日期的该怎么写呢?
问题点数:30、回复次数:8Top
1 楼ahalf(ahalf)回复于 2003-06-04 08:02:43 得分 4
使用formatTop
2 楼gq(游子)回复于 2003-06-04 08:35:39 得分 4
Transact-SQL 参考
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
请参见
CAST 和 CONVERT
数据类型
日期和时间函数
©1988-2000 Microsoft Corporation。保留所有权利。
Top
3 楼lsrzm(Michale Lee)回复于 2003-06-04 08:43:06 得分 5
Set rs=Server.CreateObject("ADODB.RecordSet")
SQL="Select * From table "
IF Trim(CStr(BeginDate))<>"" then
SQL =SQL +" where Date>=#"&CStr(BeginDate)&"#"
End IF
IF Trim(CStr(EndDate))<>"" then
SQL =SQL +" and Date <=#"&CStr(EndDate)&"#"
End IF
SQL =SQL +" order by Date DESC"
set rs=conn.execute(sql)
Top
4 楼chichuli_4(clf)回复于 2003-06-04 08:44:18 得分 3
#"&CStr(BeginDate)&"#
Top
5 楼scu96124678(冰河)回复于 2003-06-04 08:52:01 得分 4
sql= "select id,username,passward,up_date from czry "
if isdate(getpara("from",date-10)) then
fs=" where up_date>="&"#"&fdate(cdate(getpara("from",date-10)))&"#"
sql=sql&fs
end if
if isdate(getpara("to1",date)) then
ts=" and up_date<"&"#"&fdate(cdate(getpara("to1",date))+1)&"#"
sql=sql&ts
'response.write sql
'response.end
end if
rs.open sql,cn,1,1Top
6 楼myflok(老虎爱吃肉)回复于 2003-06-04 09:38:11 得分 4
Set rs=Server.CreateObject("ADODB.RecordSet")
SQL="Select * From table "
IF Trim(CStr(BeginDate))<>"" and isdate(Begindate) then
SQL =SQL +" where [Date]>='" & CStr(BeginDate) & "'"
IF Trim(CStr(EndDate))<>"" and isdate(Enddate) then
SQL =SQL +" and [Date] <='" & CStr(EndDate) & "'"
end if
End IF
SQL =SQL +" order by [Date] DESC"
rs.open sql,cn,3,1
注意[Date]Top
7 楼azza8888(azza8888)回复于 2003-06-07 07:22:49 得分 3
在access中时间段要用##包住,在oracle中得用ts{}包住Top
8 楼dongdong6161(东东)回复于 2003-06-07 09:03:21 得分 3
用一般的比较只能蒙一下人,我觉得只有用(datediff('d','"&tdate&"',stopdate)>=0)才能准确比较,而且你的两个字段最好都是同一个时间函数生成的,自己构造的时间格式容易出问题!Top




