SQL怎样实现1-1,1,1-2-1,2-1,2-1-2-3,1-3,10-1这样的排序

难道按照字符串排序不就应该是这样的吗
■网友
最近做了个多级数据导入的功能,客户嫌在Excel中通过ID与父ID来描述父子关系太复杂。想好久没有方案,有一天看到word文档结构图时,突然来了灵感,于是采用一列描述法:11.122.12.234...为了配合原有数据结构,入库前做转换,导出时也做转换。如果大神们有更好方案,请指教。
■网友
每段定长的,让他自己录成01-1,这个不能惯着~_~每段不定长的,拆字段存,select sec1+\u0026#39;-\u0026#39;+sec2+\u0026#39;-\u0026#39;+sec3 ... order by sec1, sec2, sec3不然就扔一个字段里,做个排序还要动字符串函数,性能不要了~_~
■网友
谢谢 @宫 磊 的提示。思路是把2-1-3转换成0002-0001-0003再排序。首先搞个函数吧。USE GO/****** OBJECT: USERDEFINEDFUNCTION . SCRIPT DATE: 10/21/2016 08:18:39 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER FUNCTION .(@箱号 VARCHAR(50))RETURNS VARCHAR(50)AS BEGIN\tDECLARE @新箱号 VARCHAR(50)\tDECLARE @箱号后 VARCHAR(50)\tSET @箱号后=@箱号 \tSET @新箱号=\u0026#39;\u0026#39;\tWHILE LEN(@箱号后)-LEN(REPLACE(@箱号后,\u0026#39;-\u0026#39;,\u0026#39;\u0026#39;))\u0026gt;0\tBEGIN\t\tIF @新箱号=\u0026#39;\u0026#39;\t\tBEGIN\t\t\tSET @新箱号=RIGHT(\u0026#39;0000\u0026#39;+LEFT(@箱号后,PATINDEX(\u0026#39;%-%\u0026#39;,@箱号后)-1),4)\t\tEND\t\tELSE\t\tBEGIN\t\t\tSET @新箱号=@新箱号+\u0026#39;-\u0026#39;+RIGHT(\u0026#39;0000\u0026#39;+LEFT(@箱号后,PATINDEX(\u0026#39;%-%\u0026#39;,@箱号后)-1),4)\t\tEND\t\t\t\tSET @箱号后=REPLACE(@箱号后,LEFT(@箱号后,PATINDEX(\u0026#39;%-%\u0026#39;,@箱号后)),\u0026#39;\u0026#39;)\tEND\t\tIF @新箱号=\u0026#39;\u0026#39;\tBEGIN\t\tSET @新箱号=RIGHT(\u0026#39;0000\u0026#39;+@箱号后,4)\tEND\tELSE\tBEGIN\t\tSET @新箱号=@新箱号+\u0026#39;-\u0026#39;+RIGHT(\u0026#39;0000\u0026#39;+@箱号后,4)\tEND\t\tRETURN @新箱号END然后, ORDER BY DBO.箱号扩展(箱号)即可。
■网友
之前写过类似需求,是让用户自己确定每段最大位数,代码里面把值补0成为0010-0001格式存在另一个字段里面用来排序


    推荐阅读