SQL比较数字字符串

SQL比较数字字符串,sql,database,string,numbers,Sql,Database,String,Numbers,这是个愚蠢的问题,但请帮我摆脱这个循环 SELECT * FROM TABLE_NAME T1 WHERE '10000' > '2' 为什么上面的条件是假的? 我知道我可以把它转换成数字,但我不知道为什么上面的条件是不正确的。非常感谢。条件为false,因为值作为字符串而不是数字进行比较。同样的原因是: WHERE 'A0000' > 'B' 计算结果为false 道德?仅对字符串和日期常量使用单引号。不要对数字使用单引号。条件为false,因为值是作为字符串而不是数字进

这是个愚蠢的问题,但请帮我摆脱这个循环

SELECT * 

FROM TABLE_NAME T1

WHERE '10000' > '2'
为什么上面的条件是假的?
我知道我可以把它转换成数字,但我不知道为什么上面的条件是不正确的。非常感谢。

条件为false,因为值作为字符串而不是数字进行比较。同样的原因是:

WHERE 'A0000' > 'B'
计算结果为false


道德?仅对字符串和日期常量使用单引号。不要对数字使用单引号。

条件为false,因为值是作为字符串而不是数字进行比较的。同样的原因是:

WHERE 'A0000' > 'B'
计算结果为false

道德?仅对字符串和日期常量使用单引号。不要对数字使用单引号。

如果您尝试

WHERE 'A' < 'B'
WHERE 'AAAAAB' > 'AAAAAA'
它返回true,因为B大于A

出于同样的原因,如果您尝试,则返回false

WHERE 'A' < 'B'
WHERE 'AAAAAB' > 'AAAAAA'
它返回true,因为B大于A


出于同样的原因,
其中'10000'>'2'
返回false

数字类型和字符串的处理方式不同

(示例)

1<2
为真

'1000'>'2'
为假

比较时,字符类型将更改为数字类型

使用49而不是“1” 和 使用50而不是“2”

结果
49>50
=FALSE

如果“1000”大于“1”,则为真


请参阅ASCII代码。数字类型和字符串的处理方式不同

(示例)

1<2
为真

'1000'>'2'
为假

比较时,字符类型将更改为数字类型

使用49而不是“1” 和 使用50而不是“2”

结果
49>50
=FALSE

如果“1000”大于“1”,则为真


查看ASCII代码。

只需简单思考即可。总之,字符类型具有ascii系统或字符集排序规则上的值

举个例子:

Declare @a char(1)='A',@b char(1)=B,@c char(1)='C'
值为1 b值为2 c值为3

它只是Sql server上基于字符的变量的字母顺序


这意味着如果您比较char、nchar、varchar或nvarchar值,程序首先检查第一个索引的值,然后是第二个索引。。。直到最后

简单想想。总之,字符类型具有ascii系统或字符集排序规则上的值

举个例子:

Declare @a char(1)='A',@b char(1)=B,@c char(1)='C'
值为1 b值为2 c值为3

它只是Sql server上基于字符的变量的字母顺序


这意味着如果您比较char、nchar、varchar或nvarchar值,程序首先检查第一个索引的值,然后是第二个索引。。。直到最后

谢谢你的答复,但我还有一个问题。那么为什么“A0000”<“B”返回TRUE?我想知道他们是如何相互比较的。@PhamNgocVinh。因为比较是按字母顺序的,就像字典里的词条一样。谢谢你的回答,但我还有一个问题。那么为什么“A0000”<“B”返回TRUE?我想知道他们是如何相互比较的。@PhamNgocVinh。因为比较是按字母顺序排列的,就像字典里的词条一样。谢谢你,不过再说一遍。为什么“30000”<“2”是错误的。我认为他们可能会比较第一个字符,然后忽略其余字符???它会比较'3000'的第一个字符(3)和'2'的第一个字符(2),现在3<2返回false,因为2的ASCII码小于3@iamdeowanshi你在这里的评论才是真正的原因;我建议,特别是因为这已经是公认的答案,把它添加到实际答案中。ABC按字母顺序排在DEFG之前;但显然,四位数大于三位数。按照字母顺序,我们先按第一个字母进行比较,而在进行比较之前,我们会在数字上填充前导零。谢谢你,但请再说一遍。为什么“30000”<“2”是错误的。我认为他们可能会比较第一个字符,然后忽略其余字符???它会比较'3000'的第一个字符(3)和'2'的第一个字符(2),现在3<2返回false,因为2的ASCII码小于3@iamdeowanshi你在这里的评论才是真正的原因;我建议,特别是因为这已经是公认的答案,把它添加到实际答案中。ABC按字母顺序排在DEFG之前;但显然,四位数大于三位数。按字母顺序,我们先看第一个字母,而在进行这种比较之前,我们会在数字上填充前导零。