Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server按子字符串选择查询顺序_Sql Server - Fatal编程技术网

Sql server SQL Server按子字符串选择查询顺序

Sql server SQL Server按子字符串选择查询顺序,sql-server,Sql Server,SQL Server表中有一列包含以下行: 菌柱:C1_xxx1、C2_xxx1、C3_xxx1、C1_xxx2、C1_xxx3、C3_xxx2等 它是一个文本列,包含以下格式的字符串:CY_mystring,其中Y是一个从1到5的数字,后跟“_”字符,然后是可以有任何值的mystring 是否有方法按以下顺序选择返回此列: C1_xxx1 C1_xxx2 C1_xxx3 ...... C1_xxxn C2_xxx1 ...... C2_xxxn C3_xxx1 ....... C3_xxxn

SQL Server表中有一列包含以下行:

菌柱:C1_xxx1、C2_xxx1、C3_xxx1、C1_xxx2、C1_xxx3、C3_xxx2等

它是一个文本列,包含以下格式的字符串:CY_mystring,其中Y是一个从1到5的数字,后跟“_”字符,然后是可以有任何值的mystring

是否有方法按以下顺序选择返回此列:

C1_xxx1
C1_xxx2
C1_xxx3
......
C1_xxxn
C2_xxx1
......
C2_xxxn
C3_xxx1
.......
C3_xxxn

由CY_uu子字符串排序


谢谢你

你说Y是一个从1到5的数字,它总是一个字符长。假设格式为xY_xxxZ,您可以先按Y再按Z排序,如:

如果Z可以长于一个字符,即10或更高,则可以使用pathindex确定末尾的位数:

order by
        substring(MyColumn,2,1) -- Second digit
,       right(MyColumn, patindex('%[^0-9]%', reverse(MyColumn))-1) -- Digits at end

你说Y是一个从1到5的数字,它总是一个字符长。假设格式为xY_xxxZ,您可以先按Y再按Z排序,如:

如果Z可以长于一个字符,即10或更高,则可以使用pathindex确定末尾的位数:

order by
        substring(MyColumn,2,1) -- Second digit
,       right(MyColumn, patindex('%[^0-9]%', reverse(MyColumn))-1) -- Digits at end

这应该可以。。先按前两个字符排序,然后按最后一个字符排序,假设最后的n总是一位数长


这应该可以。。先按前两个字符排序,然后按最后一个字符排序,假设最后的n总是一位数长


我不明白为什么MyColumn的订单不起作用。@Tim Schmelter:因为生活有时候很简单,我们往往会把它弄得很复杂。谢谢,成功了@据我所知,Tim,xxx对每条记录都是任意的,OP需要考虑最后一个字符进行排序。我不明白为什么按MyColumn排序不起作用。@Tim Schmelter:因为生活有时是如此简单,而我们往往会使它变得复杂。谢谢,成功了@据我所知,Tim,xxx对每条记录都是任意的,OP需要考虑最后一个字符进行排序..+1在重读问题后,这看起来像是正确的答案+1在重读问题后,这看起来像是正确的答案
SELECT
   Column1
FROM
   TABLENAME
ORDER BY
   LEFT(Column1,2) ASC, 
   RIGHT(Column1,1) ASC