我有以下变量和 CASE 语句:
DECLARE @DATE_VALUE VARCHAR(20) = '4/29/2021'
DECLARE @CONVERT_CODE VARCHAR(1) = 'I'
SELECT CASE @CONVERT_CODE WHEN 'I' THEN DATEDIFF(day, '04/21/2021', @DATE_VALUE)
END AS ConvertedValue
Run Code Online (Sandbox Code Playgroud)
它没有什么特别之处。正如我所期望的那样,它返回 8 (int)。
但是,一旦我将返回日期时间数据类型的条件添加到我的 CASE 语句中,我就不再得到 8 (int),尽管继续使用“I”作为 @CONVERT_CODE 值。
DECLARE @DATE_VALUE VARCHAR(20) = '4/29/2021'
DECLARE @CONVERT_CODE VARCHAR(1) = 'I'
SELECT CASE @CONVERT_CODE WHEN 'I' THEN DATEDIFF(day, '04/21/2021', @DATE_VALUE)
WHEN 'D' THEN GETDATE()
END AS ConvertedValue
Run Code Online (Sandbox Code Playgroud)
相反,我得到“1900-01-09 00:00:00.000”的日期时间值
我认为“D”根本不应该被评估,因为在 SQL Server 中,一旦条件评估为真(在这种情况下为“I”),它应该脱离 CASE 语句——所以我不确定为什么“D”的数据类型会影响整体返回数据类型。另外,如果我颠倒条件的顺序并仍然使用“I”也没关系:
DECLARE @DATE_VALUE VARCHAR(20) = '4/29/2021'
DECLARE @CONVERT_CODE VARCHAR(1) = 'I'
SELECT …
Run Code Online (Sandbox Code Playgroud)