关闭

DATEDIFF与dateadd在access和mssql下的使用例子

408人阅读 评论(0) 收藏 举报
Access中:DateDiff('d',Time1,Time2)
Sql中:DateDiff(d,Time1,Time2)
下面是我自己的sql语句
'判断数据库类型
IF IsSqlDataBase = 1 Then
Conn.execute("Delete from lyt_log_info where datediff(day,logintime,getdate())>=3 ")
Else
Conn.execute("Delete from lyt_log_info where datediff('d',logintime,now())>=3")
End IF

sql中d 或者day的引号不要 注意后面获得系统时间的函数是不同的
如在access中使用
Conn.execute("Delete from lyt_log_info where datediff(day,logintime,getdate())>=3 ")
则会提示
Microsoft JET Database Engine (0x80040E14)
表达式中 'getdate' 函数未定义。
如在access中day或者w y等不加引号,会提示至少没有一个参数被指定

例子:

以下为代码部分:
Response.write "离2007-9-18还有"&datediff("d",now(),"2007-9-18")&"天"
距离某一天还有多少天,你可以修改下参数 ""d"" 算出距离某天还有多少月 多少week 多少 hour




注:DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。为了计算 date1 与 date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1 与 date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。如果 date1 比 date2 来得晚,则 DateDiff 函数的返回值为负数。firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。如果 date1 或 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 或 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 或 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。

DateAdd 和 DateDiff 的第一个参数
DateAdd 返回一个日期加上特定时间间隔后的值。
语法:DateAdd(interval, number, date)
interval 表示时间单位,即指示 number 是表示年,还是月,还是分,还是其它的,如下:
yyyy 年
q 季度
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 小时
n 分钟
s 秒
不好理解的是:y、w,开始我以为 y 的单位是 365天,w 的单位是 7天。其实不是的,细读了微软参考并作了测试后发现,这其中 y、w、d 是同意义的,表示天数。
另外,DateDiff 的第一个参数中 y 和 d 是同意义的,w 不再与 d 同意义,而是表示相隔多少个 7天,这与 ww 不同。假如今天是一周的第一天,至于星期几是一周的第一天得看计算机设置和第四个参数了,那么今天与昨天相隔 0 个 w,相隔 1 个 ww,因为今天与昨天相差不足 1 个 7天,但今天已经是另外一周了。
很难想像吧,但事实就是这样,总结一下。

不同
1、数据库的问题,Access和Sql读取时间的函数不一样,Now()只能在Access中使用,在Sql中只能使用GetDate()函数来获取系统时间,相应的其他函数如Time(),反正大家在调试的时候注意下

2、就是DateDiff('d',Time1,Time2),刚开始的时候我专数据库ACCESS专SQL发现这个函数怎么调试在多不能通过,在ACCESS下可以使用的到了SQL就不能使用,郁闷~~~

具体是:

Access中:DateDiff('d',Time1,Time2)

Sql中:DateDiff(d,Time1,Time2)
下面是我自己的sql语句
'判断数据库类型
IF IsSqlDataBase = 1 Then
Conn.execute("Delete from lyt_log_info where datediff(day,logintime,getdate())>=3 ")
Else
Conn.execute("Delete from lyt_log_info where datediff('d',logintime,now())>=3")
End IF

sql中d 或者day的引号不要 注意后面获得系统时间的函数是不同的
如在access中使用
Conn.execute("Delete from lyt_log_info where datediff(day,logintime,getdate())>=3 ")
则会提示
Microsoft JET Database Engine (0x80040E14)
表达式中 'getdate' 函数未定义。
如在access中day或者w y等不加引号,会提示至少没有一个参数被指定

dateAdd

DateAdd 函数
返回已添加指定时间间隔的日期。

DateAdd(interval, number, date)

参数
interval

必选项。字符串表达式,表示要添加的时间间隔。有关数值,请参阅“设置”部分。

number

必选项。数值表达式,表示要添加的时间间隔的个数。数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期)。

date

必选项。Variant 或要添加 interval 的表示日期的文字。

设置
interval 参数可以有以下值:
设置 描述
yyyy 年
q 季度
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 小时
n 分钟
s 秒
'---------------------------------
可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔,可以使用“一年的日数”(“y”)、“日”(“d”)或“一周的日数”(“w”)。

DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月:

NewDate = DateAdd("m", 1, "31-Jan-95")
在这个示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。

如果计算的日期是在公元 100 年之前,则会产生错误。

如果 number 不是 Long 型值,则在计算前四舍五入为最接近的整数。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1114326次
    • 积分:15646
    • 等级:
    • 排名:第715名
    • 原创:866篇
    • 转载:4篇
    • 译文:0篇
    • 评论:13条
    最新评论