使用CHARINDEX将NVARCHAR DATE转换为DATETIME

问题描述 投票:-1回答:2

我尝试将nvarchar列转换为datetime时收到以下错误。

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

错误信息

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

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

我已经看到了一些charindex的例子,但似乎无法让它工作,任何帮助获得正确的代码工作非常感谢。

更新 - '2018-08-29 00:00:00.000'是一个日期时间列,需要保留为了执行where子句。

sql sql-server nvarchar ssms-2017
2个回答
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的正确类型。


0
投票

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

SET DATEFORMAT YMD
Select *
from table 1
where
convert(datetime, col1) >= '2018-08-29 00:00:00.000'
© www.soinside.com 2019 - 2024. All rights reserved.