sql - 从字符串转换日期时间时出现转换错误
问题描述
我正在尝试创建一个存储过程。日期列使用varchar
数据类型。
我希望能够使用日期作为约束来选择数据。
ALTER PROCEDURE [dbo].[spStatusReport]
@ShipFrom VARCHAR(20) = NULL,
@ShipTo VARCHAR(20) = NULL,
AS
SELECT
LOCATION, NEXT_DEPT,
CAST(CONVERT(VARCHAR, REQ_DATE, 104) AS DATETIME) AS REQ_DATE,
CAST(CONVERT(VARCHAR, SCH, 104) AS DATETIME) AS SCH,
Tool
FROM
Status_Report
WHERE
(@ShipFrom IS NULL OR
CAST(CONVERT(VARCHAR, SCH, 104) AS DATETIME) >= CAST(CONVERT(VARCHAR, @ShipFrom, 104) AS DATETIME))
AND (@ShipTo IS NULL OR
CAST(CONVERT(VARCHAR, SCH, 104) AS DATETIME) <= CAST(CONVERT(VARCHAR, @ShipTo, 104) AS DATETIME))
当我尝试执行这个存储过程
exec spStatusReport '12/04/2018','NULL'
我希望用户只能传递一个参数 ShipFrom 或 ShipTO 甚至两者都传递,但我收到此错误
从字符串转换日期和/或时间时转换失败
解决方案
您传递的是文字字符串 'NULL'
而不是值NULL
;他们不一样。此外,您应该使用 ISO 格式的日期,这样它就不会模棱两可了。尝试以下方法之一:
EXEC spStatusReport '20180412',NULL;
EXEC spStatusReport @ShipFrom = '20180412';
编辑:Sean Lange 在评论中也是正确的。您的参数应该是 a date
,而不是 a varchar
。始终使用适合您的数据的数据类型。varchar
远非“一刀切”的数据类型。
推荐阅读
- python - 不需要更新时的排行榜代码错误
- node.js - 如何使用外部样式和字体渲染 ejs 文件?
- javascript - 使用 post 方法的 Facebook Graph API BATCH 请求
- python - 错误:未编译 Python ssl 扩展。缺少 OpenSSL 库?(在 ubuntu 18.04 上安装 python 2.7)
- react-native - 如何在 Android 中使用 React Navigation Deep 链接
- reactjs - react js编译失败
- apache - 如何在 Apache FTP 上实现 ALLO 命令?
- email - 发送到与来自地址相同域的电子邮件以“中继被拒绝”退回
- vim - vim:在使用 cscope 时更改密码
- c - Makefile 找不到规则