【问题标题】:How to fix SQL error when querying based on date value in a where statement?根据where语句中的日期值查询时如何修复SQL错误?
【发布时间】:2021-07-28 00:19:51
【问题描述】:
select 
    pid, last_name, first_name, 
    cast(CONVERT(varchar, birth_date, 23) as datetime) as DOB
from 
    TABLE
where  
    (last_name = 'Doe' and birth_date = '1999-09-09' and pid = '1234567') or
    (last_name = 'Doet' and birth_date = '1999-09-19' and pid = '12345678')

我有很多姓氏要提取。这只是展示了两个例子。由于列表太长,我收到错误消息:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

当我只查询不到500条时,完全没有错误。

【问题讨论】:

  • 您使用的是哪个 dbms? (产品特定查询。)
  • 请提供样本数据和所需结果,以及适当的数据库标签。

标签: sql date format where-clause


【解决方案1】:

很多时候问题出在时区设置上。以 mm/dd/yyyy 等其他格式指定(通常有效)。

如果您需要转换您的输入,您可以尝试查看 CONVERT 方法。语法是

CONVERT(VARCHAR,@your_date_Value,103)

CONVERT(VARCHAR, '12/30/2013', 103)

最后的103是日期时间格式。

有关转换格式和进一步阅读的信息,请参阅此链接。 https://www.w3schools.com/sql/func_sqlserver_convert.asp

【讨论】:

    【解决方案2】:

    评论太长了。首先,你为什么要转换?只需使用:

    select pid, last_name, first_name, birth_date
    

    如果您想要特殊格式的生日,那么(无论“23”是什么)将其转换为字符串:

    select pid, last_name, first_name, convert(varchar(255), birth_date, 23)
    

    无需转换回字符串。请注意varchar 的长度。默认长度因上下文而异,省略显式长度只是在乞求难以调试的错误。

    希望birth_date 不是字符串,因为这表明数据模型不正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 2012-07-30
      • 2014-03-16
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多