为什么这些简单的查询返回不同的结果?只有差异@val.
查询#1:
DECLARE @val NVARCHAR
BEGIN
SET @val = '0320'
SELECT 1
WHERE CAST(SUBSTRING(@val, 3, 2) AS INT) + 2000 < YEAR(GETDATE())
END
Run Code Online (Sandbox Code Playgroud)
查询#2:
SELECT 1
WHERE CAST(SUBSTRING('0320', 3, 2) AS INT) + 2000 < YEAR(GETDATE())
Run Code Online (Sandbox Code Playgroud)
小智 8
因为您尚未声明NVARCHAR变量的大小,所以在第一个示例中,内容@val为"0",而不是"0320".
要解决此问题,请使用DECLARE @val NVARCHAR(10).
DECLARE @val NVARCHAR(10)
BEGIN
SET @val = '0320'
SELECT 1
WHERE CAST(SUBSTRING(@val, 3, 2) AS INT) + 2000 < YEAR(GETDATE())
END
Run Code Online (Sandbox Code Playgroud)