SQL Server 2005表中的一个列包含字母数字值,我想按照字母数字排序对行进行排序。 HOUSE_NO
是NVARCHAR
列,其中包含以下值:
- 2/1 NAWOG
- 1/1
- 2/1 A
- 1/2 A GOLCHA
- 1
- 2
- SHASWAT KUTIR
- 3 A
- 11/1
- 11
我希望将它们排序为:
- 1
- 1/1
- 1/2 A GOLCHA
- 2
- 2/1 A
- 2/1 NAWAG
- 3 A
- 11
- 11/1
- SHASWAT KUTIR
我尝试了很多方法但没有成功。我需要你的建议
答案 0 :(得分:1)
呸。对于大型数据集,这不是你想要在T-SQL中做的事情。
DECLARE @x TABLE(HOUSE_NO NVARCHAR(32));
INSERT @x SELECT '2/1 NAWOG'
UNION ALL SELECT '1/1'
UNION ALL SELECT '2/1 A'
UNION ALL SELECT '1/2 A GOLCHA'
UNION ALL SELECT '1'
UNION ALL SELECT '2'
UNION ALL SELECT 'SHASWAT KUTIR'
UNION ALL SELECT '3 A'
UNION ALL SELECT '11/1'
UNION ALL SELECT '11';
DECLARE @n NVARCHAR(10) = N'%[^0-9]%'
SELECT HOUSE_NO FROM @x
ORDER BY CASE
WHEN HOUSE_NO LIKE N'[0-9]' + @n
THEN CONVERT(INT, SUBSTRING(HOUSE_NO, 1, PATINDEX(@n, HOUSE_NO)-1))
WHEN HOUSE_NO NOT LIKE @n THEN CONVERT(INT, HOUSE_NO)
ELSE 2147483647 END,
CASE WHEN HOUSE_NO NOT LIKE @n THEN NULL
ELSE SUBSTRING(HOUSE_NO, PATINDEX(@n, HOUSE_NO), LEN(HOUSE_NO)) END;
无论如何,对房屋号码进行分类有什么意义?