Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server 在SQL Server中将字符串转换为日期时间时发生异常_Sql Server_Datetime - Fatal编程技术网

Sql server 在SQL Server中将字符串转换为日期时间时发生异常

Sql server 在SQL Server中将字符串转换为日期时间时发生异常,sql-server,datetime,Sql Server,Datetime,在带有语句的中: WITH queryResult AS ( SELECT CONVERT(DATETIME, '2017-12-12 ' + PARTIALDATE) FROM tableA WHERE ISDATE('2017-12-12 ' + PARTIALDATE) = 1 ) .... 在此块中,我将获得异常: 从字符串转换日期和/或时间时,转换失败 所以我做了一些改变: WITH subQueryR

在带有语句的
中:

WITH queryResult AS
(
    SELECT 
        CONVERT(DATETIME, '2017-12-12 ' + PARTIALDATE) 
    FROM 
        tableA 
    WHERE 
        ISDATE('2017-12-12 ' + PARTIALDATE) = 1
)
....
在此块中,我将获得异常:

从字符串转换日期和/或时间时,转换失败

所以我做了一些改变:

WITH subQueryResult AS
(
    SELECT 
        PARTIALDATE 
    FROM 
        tableA 
    WHERE 
        ISDATE('2017-12-12 ' + PARTIALDATE) = 1
),
queryResult AS
(
    SELECT 
        CONVERT(DATETIME, '2017-12-12 ' + PARTIALDATE) 
    FROM 
        subQueryResult
)
而且它有效


但是为什么呢?

在转换发生之前,
中的
没有进行过滤。case语句的操作顺序是有保证的。以下方面应起作用:

WITH queryResult AS
(
    SELECT 
        CASE WHEN ISDATE('2017-12-12 ' + PARTIALDATE) = 1 THEN CONVERT(DATETIME, '2017-12-12 ' + PARTIALDATE) ELSE NULL END
    FROM 
        tableA 
    WHERE 
        ISDATE('2017-12-12 ' + PARTIALDATE) = 1
)

PARTIALDATE的数据类型是什么?我猜。。第二个查询保证partialdate是一个日期,因为非日期行被排除。。因此,皈依者works@Harryvarchar(100)@Harry但在第一个SQL文本中,我有相同的where语句。如果您使用的是SQL Server 2012或更高版本,您可以查看
TRY\u CAST
/
TRY\u CONVERT
命令-如果某些内容无法转换(而不是抛出错误),它们将返回
NULL
只有当PartialDate不合适并且Select语句中没有使用ISDATE()子句时,我才会出现此错误。因此,对于我的测试来说,第一个查询似乎很好