在SQL中排序层级文本
发布时间:2020-12-12 16:51:35 所属栏目:MsSql教程 来源:网络整理
导读:我有一个带有varchar字段的表.此字段存储我要订购的分层数字. 以下是我的数据示例: 11.11.1.11.1.21.1.3.1.1.41.1.51.1.6.1.1.710.10.110.210.311.11.111.22.2.11.2.21.2.2.11.2.2.2 如何使用T-SQL实现以下结果: 11.11.1.11.1.21.1.31.1.41.1.51.1.61.1.71.
我有一个带有varchar字段的表.此字段存储我要订购的分层数字.
以下是我的数据示例: 1 1.1 1.1.1 1.1.2 1.1.3. 1.1.4 1.1.5 1.1.6. 1.1.7 10. 10.1 10.2 10.3 11. 11.1 11.2 2. 2.1 1.2.2 1.2.2.1 1.2.2.2 如何使用T-SQL实现以下结果: 1 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.2.2 1.2.2.1 1.2.2.2 2. 2.1 10. 10.1 10.2 10.3 11. 11.1 11.2 我试图用下面的SQL来拆分这些部分,但是这并不优雅. SELECT CASE WHEN CHARINDEX('.',SUBSTRING(LTRIM(RTRIM(NR)),1,LEN(NR)-1)+REPLACE(SUBSTRING(LTRIM(RTRIM(NR)),LEN(NR),1),'.','')) = 0 THEN SUBSTRING(LTRIM(RTRIM(NR)),'') ELSE REPLACE(SUBSTRING(SUBSTRING(LTRIM(RTRIM(NR)),''),CHARINDEX('.',''))),'') END AS FIRST_PART,CASE WHEN CHARINDEX('.','')) > 0 THEN SUBSTRING( SUBSTRING(LTRIM(RTRIM(NR)),'')) +1,LEN( SUBSTRING(LTRIM(RTRIM(NR)),'') ) ) ELSE '0' END AS SECOND_PART FROM TEST_TABLE theree是更好的方法吗? 解决方法尝试这个:DECLARE @DataSource TABLE ( [Value] VARCHAR(12) ); INSERT INTO @DataSource ([Value]) VALUES ('1'),('1.1'),('1.1.1'),('1.1.2'),('1.1.3.'),('1.1.4'),('1.1.5'),('1.1.6.'),('1.1.7'),('10.'),('10.1'),('10.2'),('10.3'),('11.'),('11.1'),('11.2'),('2.'),('2.1'),('1.2.2'),('1.2.2.1'),('1.2.2.2'); SELECT * FROM @DataSource ORDER BY CAST('/' + IIF(RIGHT([Value],1) = '.',LEFT([Value],LEN([Value]) - 1),[Value]) + '/' AS HIERARCHYID); 您可以查看hierarchyid了解更多详情.检查ORDER BY子句只是删除.在值的结尾(如果存在). 您可以使用简单的CASE更改IIF功能,如下所示: SELECT * FROM @DataSource ORDER BY CAST('/' + CASE WHEN RIGHT([Value],1) = '.' THEN LEFT([Value],LEN([Value]) - 1) ELSE [Value] END + '/' AS HIERARCHYID); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |