使用CHARINDEX将NVARCHAR DATE转换为DATETIME

时间:2018-09-18 12:58:58

标签: sql sql-server nvarchar ssms-2017

尝试将nvarchar列转换为datetime时出现以下错误。

Select *
from table 1
where
convert(datetime, col1) >= '2018-08-29 00:00:00.000'

错误消息

  

将varchar数据类型转换为datetime数据类型会导致超出范围的值。

Col1是NVARCHAR列(我无法控制此数据类型,因此无法更改它)

我已经看过一些charindex的示例,但是似乎无法使其正常工作,对于使代码正确运行的任何帮助,我们深表感谢。

UPDATE-'2018-08-29 00:00:00.000'是需要保留的datetime列,以便执行where子句。

2 个答案:

答案 0 :(得分:2)

使用try_convert()

Select *
from table 1
where try_convert(datetime, col1) >= '2018-08-29'  -- time is not necessary

要查找引起问题的值:

select col1
from t
where try_convert(datetime, col1) is null and col1 is not null;

注意:转换可能需要格式参数。不过,最后,您应该修复数据以为col1使用正确的类型。

答案 1 :(得分:0)

您可以在查询开始之前定义SET DATEFORMAT YMD。 看看下面的查询

SET DATEFORMAT YMD
Select *
from table 1
where
convert(datetime, col1) >= '2018-08-29 00:00:00.000'