msg 242,级别16,状态3,第12行将varchar数据类型转换为datetime数据类型导致值超出范围

agxfikkp  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(375)

查询返回错误:

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语句中的“-”。我觉得一切都很好。我需要检查一下案件陈述中的情况。

q9yhzks0

q9yhzks01#

使用 TRY_CONVERT() :

SELECT TRY_CONVERT(datetime, @x),
       COALESCE(TRY_CONVERT(VARCHAR(10), TRY_CONVERT(DATETIME, LEFT(@x, 10), 105), 101), '-')

我不认为转换回字符串有什么好处。

相关问题