DATEDIFF计算日期差值时,是不是不把前面的那个日期也算进去的?
2009-1-25和2009-1-31之间应该是7天吧,但是DATEDIFF的结果是6
它是没把哪天算进去??
那请问下日期型的数据2009-1-25如何用最简单的办法减去一天得到前一天??
就是不要把年月日提取出来重新组合的办法
 

解决方案 »

  1.   

    DateDiff 函数 
    描述
    返回两个日期之间的时间间隔。 
    语法
    DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]])
    DateDiff 函数的语法有以下参数:参数 描述 
    interval 必选。字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。 
    date1, date2 必选。日期表达式。用于计算的两个日期。 
    firstdayofweek 可选。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。 
    firstweekofyear 可选。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。 
    设置
    interval 参数可以有以下值:
    设置 描述 
    yyyy 年 
    q 季度 
    m 月 
    y 一年的日数 
    d 日 
    w 一周的日数 
    ww 周 
    h 小时 
    m 分钟 
    s 秒 
    firstdayofweek 参数可以有以下值:常数 值 描述 
    vbUseSystem 0 使用区域语言支持 (NLS) API 设置。 
    vbSunday 1 星期日(默认) 
    vbMonday 2 星期一 
    vbTuesday 3 星期二 
    vbWednesday 4 星期三 
    vbThursday 5 星期四 
    vbFriday 6 星期五 
    vbSaturday 7 星期六 
    firstweekofyear 参数可以有以下值:常数 值 描述 
    vbUseSystem 0 使用区域语言支持 (NLS) API 设置。 
    vbFirstJan1 1 由 1 月 1 日所在的星期开始(默认)。 
    vbFirstFourDays 2 由在新年中至少有四天的第一周开始。 
    vbFirstFullWeek 3 由在新的一年中第一个完整的周开始。 
    说明
    DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。
    要计算 date1 和 date2 相差的天数,可以使用“一年的日数”(“y”)或“日”(“d”)。当 interval 为“一周的日数”(“w”)时,DateDiff 返回两个日期之间的星期数。如果 date1 是星期一,则 DateDiff 计算到 date2 之前星期一的数目。此结果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 date1 和 date2 之间星期日的数目。如果 date2 是星期日,DateDiff 将计算 date2,但即使 date1 是星期日,也不会计算 date1。如果 date1 晚于 date2,则 DateDiff 函数返回负数。firstdayofweek 参数会对使用“w”和“ww”间隔符号的计算产生影响。如果 date1 或 date2 是日期文字,则指定的年度会成为日期的固定部分。但是如果 date1 或 date2 被包括在引号 (" ") 中并且省略年份,则在代码中每次计算 date1 或 date2 表达式时,将插入当前年份。这样就可以编写适用于不同年份的程序代码。在 interval 为“年”(“yyyy”)时,比较 12 月 31 日和来年的 1 月 1 日,虽然实际上只相差一天,DateDiff 返回 1 表示相差一个年份。
      

  2.   

      DateAdd()
      返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。 
      表达式 DateAdd(timeinterval,number,date)
      描述
      interval必要。字符串表达式,是所要加上去的时间间隔。 
      number必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。 
      date必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。 
      设置 interval 参数,具有以下设定值: 
      设置 描述 
      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 毫秒
      说明 
      可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。 
      为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。 
      DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月: 
      DateAdd(m, 1, 31-Jan-95) 
      上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。 
      如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。 
      如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。
      注意 DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。
      附:
      number 
      是用来增加 datepart 的值。数值表达式,设定一个日期所加上的一段期间,可为正值或负值,正值表示加(结果为 >date 以后的日期),负值表示减(结果为 >date 以前的日期)。 
      如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为 datepart 指定 day,为 number 指定 1.75,则 date 将增加 1。 
      date 
      是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。有关指定日期的更多信息,请参见 datetime 和 smalldatetime。 
      如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。 
      返回类型 
      返回 datetime,但如果 date 参数是 smalldatetime,返回 smalldatetime。 
      示例 
      此示例打印出 pubs 数据库中标题的时间结构的列表。此时间结构表示当前发布日期加上 21 天。 
      USE pubs 
      GO 
      SELECT DATEADD(day, 21, pubdate) AS timeframe 
      FROM titles 
      GO 
      下面是结果集: 
      timeframe 
      --------------------------- 
      Jul 3 1991 12:00AM 
      Jun 30 1991 12:00AM 
      Jul 21 1991 12:00AM 
      Jul 13 1991 12:00AM 
      Jun 30 1991 12:00AM 
      Jul 9 1991 12:00AM 
      Mar 14 1997 5:09PM 
      Jul 21 1991 12:00AM 
      Jul 3 1994 12:00AM 
      Mar 14 1997 5:09PM 
      Nov 11 1991 12:00AM 
      Jul 6 1991 12:00AM 
      Oct 26 1991 12:00AM 
      Jul 3 1991 12:00AM 
      Jul 3 1991 12:00AM 
      Nov 11 1991 12:00AM 
      Jul 3 1991 12:00AM 
      Jul 3 1991 12:00AM 
      (18 row(s) affected) 
      MYSQL上应用实例:
      select * from format where add_date >="dateadd('dd',-1,'2008-05-19')"
      取出2008年5月18日以后的所有数据。
      ACCESS上应用实例:
      select * from format where add_date >=dateadd('d',1,#2008/05/19#)
      取出2008年5月20日以后的所有数据。