SQL to";“订购”;2个nvarchar柱

SQL to";“订购”;2个nvarchar柱,sql,sql-order-by,Sql,Sql Order By,我有两个nvarchar列,我需要根据它们对查询进行排序(第1列示例:TW001_1,第2列示例:测试文档_2) 如何使用与使用整数(按第1列、第2列asc排序)相同的方式对2列NVARCHAR进行排序?您可以将文本分为文本部分和数字部分,然后应用所需的排序。例如: SELECT column1, LEFT(column1, 2) as textSort, CAST(SUBSTRING(column1, 3, 8) as int) as numberSort1, CAST(RIGHT(colum

我有两个nvarchar列,我需要根据它们对查询进行排序(第1列示例:TW001_1,第2列示例:测试文档_2)


如何使用与使用整数(按第1列、第2列asc排序)相同的方式对2列NVARCHAR进行排序?

您可以将文本分为文本部分和数字部分,然后应用所需的排序。例如:

SELECT column1, LEFT(column1, 2) as textSort, CAST(SUBSTRING(column1, 3, 8) as int) as numberSort1, CAST(RIGHT(column1, 1) as int) as numberSort2
FROM table1 
ORDER BY textSort, numberSort1, numberSort2;

这是基于假设,列1的格式为AA9999999_9(即,2个字母,后跟8位数字,然后是下划线和一位数字)。

您所说的“与使用整数的方式相同”是什么意思?你的意思是“abc11”应该排在“abc100”之前,就像数字11排在100之前一样吗?嗨,是的。嗯,我认为这是不可能的。您可以按文本或数字进行排序,而不是两者的混合。如果格式相当静态,例如3个字母后跟一个数字,则可以使用substring函数将其拆分为两个字段,然后分别对其进行排序。顺便说一句,不要发布自己问题的答案。改为编辑问题以添加更多细节。你可能会被禁止,因为他们对这方面的规定非常严格。阅读发布规则…谢谢,将其拆分为两个字段的最佳方式是什么。你能给我举个例子吗?所有数字均采用此格式AB31000016_1。AB3200017_2等不要发布更多问题作为答案,这不是一个讨论论坛,而是编辑您的原始问题。