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()子句时,我才会出现此错误。因此,对于我的测试来说,第一个查询似乎很好