Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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按字母数字顺序排序_Sql_Sql Server_Alphanumeric - Fatal编程技术网

SQL按字母数字顺序排序

SQL按字母数字顺序排序,sql,sql-server,alphanumeric,Sql,Sql Server,Alphanumeric,所以我在这里看了几个不同的例子,但是它们似乎都不适合我 以下是我需要排序的示例: Alpha #1 Beta #3 Charlie #2 Alpha #2 Charlie #1 Beta #2 Beta #1 Alpha #10 我想什么时候分类 Alpha #1 Alpha #2 Alpha #10 Beta #1 Beta #2 Beta #3 Charlie #1 Charlie #2 但是,当我使用以下查询时,Alpha#10没有遵循所需的规则 ORDER BY Case When

所以我在这里看了几个不同的例子,但是它们似乎都不适合我

以下是我需要排序的示例:

Alpha #1
Beta #3
Charlie #2
Alpha #2
Charlie #1
Beta #2
Beta #1
Alpha #10
我想什么时候分类

Alpha #1
Alpha #2
Alpha #10
Beta #1
Beta #2
Beta #3
Charlie #1
Charlie #2
但是,当我使用以下查询时,
Alpha#10
没有遵循所需的规则

ORDER BY 
Case When IsNumeric(LEFT(MachineName,1)) = 1 
     Then CASE When IsNumeric(MachineName) = 1 
               Then Right(Replicate('0',20) + MachineName + '0', 20)
               Else Right(Replicate('0',20) + MachineName, 20) 
          END
     When IsNumeric(LEFT(MachineName,1)) = 0 
     Then Left(MachineName + Replicate('',21), 20)
End
我得到的是:

Alpha #1
Alpha #10
Alpha #2
...
我不熟悉
,所以我可能做错了什么,所以任何指导都将不胜感激

DECLARE @t TABLE(v VARCHAR(100))

INSERT INTO @t VALUES
('Alpha #1'),
('Beta #3'),
('Charlie #2'),
('Alpha #2'),
('Charlie #1'),
('Beta #2'),
('Beta #1'),
('Alpha #10'),
('Alpha #')

SELECT * FROM @t
ORDER BY CASE WHEN PATINDEX('%[0-9]%', v) > 1 THEN SUBSTRING(v, 1, PATINDEX('%[0-9]%', v) - 1) END, 
         CASE WHEN PATINDEX('%[0-9]%', v) > 1 THEN CAST(SUBSTRING(v, PATINDEX('%[0-9]%', v), LEN(v)) AS INT) END
输出:

Alpha #
Alpha #1
Alpha #2
Alpha #10
Beta #1
Beta #2
Beta #3
Charlie #1
Charlie #2

是的,我相信这就是答案,但是如果我有一行没有数字呢?例如,
Delta
我得到一个错误:
传递给LEFT或SUBSTRING函数的长度参数无效。
我认为这是由于某些条目中没有数字造成的。谢谢!这太完美了