【发布时间】:2020-07-24 15:24:44
【问题描述】:
查询返回错误:
DECLARE @x VARCHAR(200);
--SELECT @x = '13/12/2019 16:01:47'
SELECT @x = '-'
select CASE WHEN ISDATE(@x)=1 THEN CONVERT(datetime, @x) else case when @x='-' then '-' else CONVERT(CHAR(10),CONVERT(DATETIME,LEFT(@x,10),105),101) END END;
如果我运行这个查询,它工作正常:
DECLARE @x VARCHAR(200);
SELECT @x = '13/12/2019 16:01:47'
--SELECT @x = '-'
select CASE WHEN ISDATE(@x)=1 THEN CONVERT(datetime, @x) else case when @x='-' then '-' else CONVERT(CHAR(10),CONVERT(DATETIME,LEFT(@x,10),105),101) END END;
也试过这个查询:
SELECT case when @x = '-' then '-'
WHEN ISDATE(@x)=1 THEN CONVERT(datetime, @x)
else CONVERT(CHAR(10),CONVERT(DATETIME,LEFT(@x,10),105),101)
END
我不明白如何处理 case 语句中的“-”。在我看来一切都很好。我需要检查case语句中的条件。
【问题讨论】:
-
SQL Server 没有类似 try_cast 的东西吗?
-
我们来看最后一条使用CASE的语句。 CASE 是一个表达式,它返回一个特定的单一数据类型的值。您不能根据条件同时返回字符串 ('-') 和日期时间值。您必须确定所需的数据类型,然后编写代码以根据需要转换所有不同的可能性。这闻起来像是一个很大的XY problem,你可能应该重新考虑你的目标和让你走上这条道路的决定。
标签: sql sql-server sql-server-2008