首页 > 解决方案 > 根据where语句中的日期值查询时如何修复SQL错误?

问题描述

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 条时,完全没有错误。

标签: sqldateformatwhere-clause

解决方案


首先,你为什么要转换?只需使用:

select pid, last_name, first_name, birth_date

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

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

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

希望,birth_date不是一个字符串,因为这将是一个糟糕的数据模型的标志。


推荐阅读