SQL Server varchar和nvarchar将不同的隐式转换为int

问题描述 投票:0回答:1

SQL Server2017。排序规则:SQL_Latin1_General_CP1_CI_AS以下代码:

----=====================================
DECLARE @qav nvarchar(255)
SET @qav = '-89'
SELECT CASE WHEN @qav < '0' THEN 1 ELSE 0 END as char_test,
        CASE WHEN @qav < 0 THEN 1 ELSE 0 END as int_test

----=====================================
DECLARE @qav1 varchar(255)
SET @qav1 = '-89'
SELECT CASE WHEN @qav1 < '0' THEN 1 ELSE 0 END as char_test,
        CASE WHEN @qav1 < 0 THEN 1 ELSE 0 END as int_test

结果不同:

char_test   int_test
----------- -----------
0           1

char_test   int_test
----------- -----------
1           1

谁能解释为什么nvarchar'-89'

tsql
1个回答
0
投票

字符串和数字完全不同。每个字符从左到右是字符串,数字按数字顺序排列。这只是correct数据类型如此重要的原因之一。

'10'等于小于 '2',因为'2'大于'1';因此'10'小于'2''09-12-2019'是“ after'31-01-1924',因为'3'大于'0'

如果要比较数字,则使用数字数据类型,而不是字符串。

© www.soinside.com 2019 - 2024. All rights reserved.