这是一个愚蠢的问题,但请帮助我摆脱困境。
SELECT *
FROM TABLE_NAME T1
WHERE '10000' > '2'
为什么上面的条件是假的? 我知道我可以把它投入数字,但我不知道为什么上面的条件不正确。非常感谢你。
答案 0 :(得分:2)
条件为false,因为值被比较为 strings ,而不是数字。原因相同:
WHERE 'A0000' > 'B'
评估为假。
道德?仅对字符串和日期常量使用单引号。不要在数字上使用单引号。
答案 1 :(得分:2)
如果您尝试
WHERE 'A' < 'B'
它给你真实的
如果您尝试
WHERE 'AAAAAB' > 'AAAAAA'
它返回true,因为B大于A
出于同样的原因WHERE '10000' > '2'
返回false
答案 2 :(得分:1)
数字类型和字符串的处理方式不同。
例)
1 < 2
为TRUE
'1000'>'2'
为假
比较时,字符类型会更改为数字类型。
使用49而不是&#39; 1&#39; 和 使用50而不是&#39; 2&#39;
结果49 > 50
= FALSE
如果&#39; 1000&#39; &GT; &#39; 1&#39;,为TRUE
请参阅ASCII码。
答案 3 :(得分:1)
简单地想一想。就这一切而言,Char类型具有ascii系统或charset整理的值。
仅举例:
Declare @a char(1)='A',@b char(1)=B,@c char(1)='C'
值为1 b值为2 c值为3
它只是按字母顺序排列Sql server上基于字符的变量。
这意味着如果你比较char,nchar,varchar或nvarchar值,程序首先会检查你的第一个索引值,然后是第二个......直到那个结束。