Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在where子句中将日期和/或时间从字符转换为字符串时,转换失败_Sql_Sql Server_Date_Select_Where Clause - Fatal编程技术网

Sql 在where子句中将日期和/或时间从字符转换为字符串时,转换失败

Sql 在where子句中将日期和/或时间从字符转换为字符串时,转换失败,sql,sql-server,date,select,where-clause,Sql,Sql Server,Date,Select,Where Clause,我有一张桌子,上面的服务日期是char(8),比如20191007。我做了一个转换(日期,服务日期)为新日期,它似乎将其转换为日期数据类型。当我尝试使用convert(date,service_date)>=“2019-10-07”时,我得到了“将日期和/或时间从字符转换为字符串时转换失败”错误。我需要改变什么才能让它工作 谢谢。存储日期的字符串格式可以根据sring文本进行过滤,因此我只使用: service_date >= '20191007' 这比使用转换函数更有效,因为它可以利用

我有一张桌子,上面的服务日期是char(8),比如20191007。我做了一个
转换(日期,服务日期)
为新日期,它似乎将其转换为日期数据类型。当我尝试使用
convert(date,service_date)>=“2019-10-07”
时,我得到了“将日期和/或时间从字符转换为字符串时转换失败”错误。我需要改变什么才能让它工作


谢谢。

存储日期的字符串格式可以根据sring文本进行过滤,因此我只使用:

service_date >= '20191007'
这比使用转换函数更有效,因为它可以利用列上的索引(如果有)

但是,正如John Cappelletti所评论的,如果您的数据格式不正确,这可能会产生意外的结果。在这种情况下,请使用
try\u cast()


try\u cast()
尝试将字符串转换为目标数据类型,如果转换失败,将生成
null

存储日期的字符串格式可以根据sring文本进行过滤,因此我只使用:

service_date >= '20191007'
这比使用转换函数更有效,因为它可以利用列上的索引(如果有)

但是,正如John Cappelletti所评论的,如果您的数据格式不正确,这可能会产生意外的结果。在这种情况下,请使用
try\u cast()


try\u cast()
尝试将字符串转换为目标数据类型,如果转换失败,则生成
null

请显示表架构和完整的命令运行。使用try\u convert(日期、服务日期)。我怀疑你有一些伪造的数据。try\u convert将返回NULL而不是抛出错误。要识别问题记录。。。从try_convert(date,service_date)为空的表中选择*不使用日期和时间数据类型存储日期和/或时间值的风险;人们存储的值不是有效的日期和时间值。我强烈建议修复数据模型。修复模型+1。将日期存储在日期字段中。不要试图解决一个根本不应该存在的问题。您也应该获得更好的性能(在大数据集上很明显),如果存在索引,还应该获得更好的利用率。如果您想以不同的格式显示日期,则更具灵活性。不幸的是,数据来自我所在的美国公共服务部,因此我无法确定数据的存储方式。请显示表架构并运行完整的命令。请使用try\u convert(日期、服务日期)。我怀疑你有一些伪造的数据。try\u convert将返回NULL而不是抛出错误。要识别问题记录。。。从try_convert(date,service_date)为空的表中选择*不使用日期和时间数据类型存储日期和/或时间值的风险;人们存储的值不是有效的日期和时间值。我强烈建议修复数据模型。修复模型+1。将日期存储在日期字段中。不要试图解决一个根本不应该存在的问题。您也应该获得更好的性能(在大数据集上很明显),如果存在索引,还应该获得更好的利用率。如果你想以不同的格式显示日期,则需要更大的灵活性。不幸的是,这些数据来自我所在的美国公共服务部,因此我无法决定如何存储这些数据。这也会拾取alpha字符串和假日期。OP犯了一个悲惨的错误,将日期存储为字符串。服务\u日期可以包含任何内容。。。即使是1970年1月12日,也>='20191007'@johncapelletti:是的,通读这些评论是一个很好的观点。我更新了我的答案,建议
试试cast()。OP犯了一个悲惨的错误,将日期存储为字符串。服务\u日期可以包含任何内容。。。即使是1970年1月12日,也>='20191007'@johncapelletti:是的,通读这些评论是一个很好的观点。我更新了我的答案,建议
try_cast()
。另一个想法是,您可以在'20191007'和'20201231'之间使用