【问题标题】:SQL DATEDIFF Not working?SQL DATEDIFF 不工作?
【发布时间】:2010-03-25 16:57:22
【问题描述】:

我正在运行一个简单的 DATEDIFF 查询,但它似乎无法正确计算天数,或者我做错了什么。

如果我跑步

PRINT DATEDIFF(Day, 2010-01-20, 2010-01-01)
RETURN 19

这是正确的。如果我将第一个日期的月份更改为 2 月 (02),我会得到一些奇怪的东西。

PRINT DATEDIFF(Day, 2010-02-20, 2010-01-01)
RETURN 20

现在不应该是 48 还是什么?

谁能看到我做错了什么,或者如果我想要这些日期之间的天数,这不是正确的功能吗?

我尝试过从另一个日期开始:

PRINT (2010-02-20) - (2010-01-01)
RETURN -20

非常感谢任何帮助。

谢谢 J.

【问题讨论】:

  • @James - 不,它不应该是 48 ...您应该将较大的日期作为最后一个参数。否则结果是否定的。也不要忘记''。请参阅下面的答案。
  • 我并不是说 48 完全是“不应该是 48 还是什么”,我只是在脑海中快速计算了一下。不过感谢您的帮助。

标签: sql tsql datediff


【解决方案1】:

你缺少引号

PRINT DATEDIFF(Day, '2010-01-01', '2010-02-20')

你得到 20 是因为

2010 - 1 - 1 = 2008
2010 - 2 - 20 = 1988

2008 - 1988 = 20

【讨论】:

    【解决方案2】:

    如果你这样运行:

    SELECT  2010-02-20, 2010-01-01
    

    你会看到

    1988  2008
    

    这是你放在这里的结果或整数运算。

    将日期常量括在单引号中:

    SELECT  DATEDIFF(Day, '2010-02-20', '2010-01-01')
    
    --
    -50
    

    【讨论】:

      【解决方案3】:

      如果你用撇号包围你的日期,它会起作用 -

      SELECT DATEDIFF(day, '2010-02-20', '2010-01-10')
      
      -41
      

      【讨论】:

        【解决方案4】:
        PRINT DATEDIFF(Day, '2010-01-10', '2010-02-20') 
        

        这需要第二个日期 - 第一个日期。不要忘记''。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多