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'
字符串和数字完全不同。每个字符从左到右是字符串,数字按数字顺序排列。这只是correct数据类型如此重要的原因之一。
'10'
等于小于 '2'
,因为'2'
大于'1'
;因此'10'
小于'2'
。 '09-12-2019'
是“ after” '31-01-1924'
,因为'3'
大于'0'
。
如果要比较数字,则使用数字数据类型,而不是字符串。