Joh*_*nes 0 sql-server sql-server-2012
我有以下数据集:
CISS_STATUS SVCDAT BRANCD
. 68
. 68
R . 68
R . 68
. 68
. 68
. 22
R 01/01/2013 65
A 01/01/2014 22
A 01/01/2015 32
Run Code Online (Sandbox Code Playgroud)
大约有 500K 条记录和 60 个其他字段,但您明白了。无论如何,我想要做的是基于 SVCDAT(这是一种 VarChar(10) 数据类型)编写一个 WHERE 子句,排除其中没有有效日期的记录(即其中带有点的记录)。
当我尝试类似的事情时:
WHERE convert(datetime,SVCDAT,1) > '1/1/1900'
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时:
WHERE CAST(SVCDAT as smalldatetime) > '1/1/1900'
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
The conversion of a varchar data type to a smalldatetime data type resulted in
an out-of-range value.
Run Code Online (Sandbox Code Playgroud)
有人对如何解决这个问题有任何想法吗?
由于您使用的是 SQL Server 2012,因此可以使用TRY_CONVERT
. 如果值无法转换,则返回 NULL:
WHERE TRY_CONVERT(datetime, SVCDAT, 1) > '1/1/1900'
Run Code Online (Sandbox Code Playgroud)
更多信息请参见此处。