SQL nvarchar顺序

SQL nvarchar顺序,sql,sql-order-by,Sql,Sql Order By,我的数据库中的表有问题 问题是: 为什么'BP99999'大于'BP100000' 每当我查询此列按DESC排序的位置时,它将'bp9999'作为第一行,而不是'BP100000' 附加信息:我的列类型是nvarchar 你对此有什么建议吗 多谢各位 目前BP后的9大于1,导致您面临的问题 可能的解决方案是,您需要从列值中取出前2个字符,然后对整数值进行排序 您可以尝试以下方法: SELECT [BProject_ID] FROM [Workload].[dbo].[Bending_Proje

我的数据库中的表有问题

问题是:

为什么
'BP99999'
大于
'BP100000'

每当我查询此列按
DESC
排序的位置时,它将
'bp9999'
作为第一行,而不是
'BP100000'

附加信息:我的列类型是
nvarchar

你对此有什么建议吗


多谢各位

目前BP后的9大于1,导致您面临的问题

可能的解决方案是,您需要从列值中取出前2个字符,然后对整数值进行排序

您可以尝试以下方法:

SELECT [BProject_ID] 
FROM [Workload].[dbo].[Bending_Projects] 
ORDER BY RIGHT([BProject_ID], LEN([BProject_ID]) - 2)
或者更简单

ORDER BY SUBSTRING([BProject_ID],2,8000)

像其他人的答案一样,你只需要收集订购的号码

ORDER BY RIGHT(BP_ID, (CHAR_LENGTH(BP_ID)) - 2 )
但您仍然需要将字符串转换为整数

ORDER BY CAST(RIGHT(BP_ID, (CHAR_LENGTH(BP_ID)) - 2 ) AS UNSIGNED)

注意:我使用MySQL是因为它是一个字符串,
BP
后面的
9
大于
BP
前缀后面的
1
。。。。因为它是一个字符串,它不看数值-它只是比较字符串…谢谢你的回答谢谢你的回答,我尝试使用你的查询,但我得到了一个错误“算术溢出错误将表达式转换为数据类型int”。这是我的查询:
从[Workload].[dbo].[Bending\u Projects]中选择[BProject\u ID]按强制转换排序(ISNULL(NULLIF(ISNUMERIC([BProject\u ID]),0),2147888647)为INT)
ORDER BY CAST(RIGHT(BP_ID, (CHAR_LENGTH(BP_ID)) - 2 ) AS UNSIGNED)