在 where 语句中根据日期值查询时如何修复 SQL 错误?
How to fix SQL error when querying based on date value in a where statement?
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')
我有很多姓氏要提取。这只是展示了两个例子。由于列表太长,我收到错误消息:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
当我只查询不到500条时,完全没有报错
首先,您为什么要转换?只需使用:
select pid, last_name, first_name, birth_date
如果您想要特殊格式的生日,则(无论“23”是什么)将其转换为字符串:
select pid, last_name, first_name, convert(varchar(255), birth_date, 23)
无需转换回字符串。请注意 varchar
的长度。默认长度因上下文而异,省略显式长度只是在乞求难以调试的错误。
希望 birth_date
不是字符串,因为那将是数据模型错误的标志。
很多时候问题出在时区设置上。以其他格式指定,例如 mm/dd/yyyy(通常有效)。
如果您需要转换输入,您可以尝试查看 CONVERT 方法。语法是
CONVERT(VARCHAR,@your_date_Value,103)
CONVERT(VARCHAR, '12/30/2013', 103)
最后的103是日期时间格式。
请参阅此 link 了解转换格式和进一步阅读。 https://www.w3schools.com/sql/func_sqlserver_convert.asp
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')
我有很多姓氏要提取。这只是展示了两个例子。由于列表太长,我收到错误消息:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
当我只查询不到500条时,完全没有报错
首先,您为什么要转换?只需使用:
select pid, last_name, first_name, birth_date
如果您想要特殊格式的生日,则(无论“23”是什么)将其转换为字符串:
select pid, last_name, first_name, convert(varchar(255), birth_date, 23)
无需转换回字符串。请注意 varchar
的长度。默认长度因上下文而异,省略显式长度只是在乞求难以调试的错误。
希望 birth_date
不是字符串,因为那将是数据模型错误的标志。
很多时候问题出在时区设置上。以其他格式指定,例如 mm/dd/yyyy(通常有效)。
如果您需要转换输入,您可以尝试查看 CONVERT 方法。语法是
CONVERT(VARCHAR,@your_date_Value,103)
CONVERT(VARCHAR, '12/30/2013', 103)
最后的103是日期时间格式。
请参阅此 link 了解转换格式和进一步阅读。 https://www.w3schools.com/sql/func_sqlserver_convert.asp