sql - 根据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 条时,完全没有错误。
解决方案
首先,你为什么要转换?只需使用:
select pid, last_name, first_name, birth_date
如果您想要特殊格式的生日,则(无论“23”是什么)将其转换为字符串:
select pid, last_name, first_name, convert(varchar(255), birth_date, 23)
无需转换回字符串。请注意长度varchar
。默认长度因上下文而异,省略显式长度只是在乞求难以调试的错误。
希望,birth_date
不是一个字符串,因为这将是一个糟糕的数据模型的标志。
推荐阅读
- reactjs - 从 Yii2 APi 获取 ReactJs 中的数据
- php - 在 Zikula php 和 Symfony 中为模块设置依赖注入
- mysql - 我需要一些 Rails 迁移帮助来添加/删除 foreign_key
- c++ - googlemock 线程和 InSequence
- r - 创建多个总和
- javascript - 如何使滚动条在某个时间后自动移动(JavaScript)
- haskell - 如何理解/使用 Haskell 修复功能
- .net - OdbcDataReader 限制
- javascript - Microsoft-Edge 添加随机溢出,而其他浏览器没有 (SVG)
- amazon-web-services - CloudFormation - 将标签应用于其他 AWS 资源