SQL比较数字字符串

时间:2017-10-05 01:47:14

标签: sql database string numbers

这是一个愚蠢的问题,但请帮助我摆脱困境。

SELECT * 

FROM TABLE_NAME T1

WHERE '10000' > '2'

为什么上面的条件是假的? 我知道我可以把它投入数字,但我不知道为什么上面的条件不正确。非常感谢你。

4 个答案:

答案 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值,程序首先会检查你的第一个索引值,然后是第二个......直到那个结束。