【问题标题】:Error comparing dates in SQL query在 SQL 查询中比较日期时出错
【发布时间】:2011-01-11 11:09:54
【问题描述】:

在 ASP.NET/C# 类中,我尝试运行一个比较日期的查询:

select * from table1 CreatedDate >='DATEADD(d,-500,GETDATE())';

基本上,我试图从过去 500 天中选择行。

问题是我收到以下错误: 从字符串转换日期时间的语法错误。

数据库中 CreatedDate 字段的一个示例是 2003-09-19 15:32:23.283 。该字段设置为 type = datetime, default = getdate()。

如果我运行查询SELECT DATEADD(d,-500,GETDATE());它返回 2008-09-17 23:41:34.710

这两个值看起来相同,所以我很惊讶收到错误消息。关于如何修改查询的想法?

【问题讨论】:

    标签: sql sql-server tsql date casting


    【解决方案1】:
    select * from table1 CreatedDate >= DATEADD(d,-500,GETDATE())
    

    去掉DATEADD(d,-500,GETDATE()) 周围的引号。这些使表达式 varchar

    Datatype precedence 表示您正在尝试将一个以 DATEADD 开头的字符串转换为日期时间...

    【讨论】:

    • 噢!这是一个简单的解决方法。谢谢。
    【解决方案2】:

    你试过不加单引号吗?

    CreatedDate >=DATEADD(d,-500,GETDATE())
    

    【讨论】:

      【解决方案3】:

      你在 dateadd 表达式周围加上了撇号,所以它不是一个表达式,它是一个字符串。这是它无法转换为日期时间值的字符串。

      select * from table1 CreatedDate >= DATEADD(d,-500,GETDATE());
      

      【讨论】:

        【解决方案4】:

        只需删除 '' 引号

        【讨论】:

          猜你喜欢
          • 2013-11-24
          • 1970-01-01
          • 2013-09-16
          • 2012-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          • 1970-01-01
          相关资源
          最近更新 更多