SQL查询在插入时对数据进行排序,先输入数字,然后输入字母,最后输入符号

时间:2019-04-24 09:22:47

标签: sql sql-server

我在编写SQL排序查询时遇到了麻烦, 我的表格如下

enter image description here

我想对上述数据进行排序,首先应该是数字,然后是字母和最后一个特殊符号,如下表。

第一个数字应排序为1,2,3,11,22,33 那么字母应该排序为,b,c,.. z 然后是符号 像下表一样

enter image description here

我已经尝试了很多方法,但是仍然没有正确的方法,请帮助我编写查询。

3 个答案:

答案 0 :(得分:1)

您可以在CASE WHEN上使用ORDER BY来创建一些组:

SELECT *
FROM table_name
ORDER BY
  CASE WHEN LEFT(FilterParameterValue, 1) LIKE '[0-9]' OR LEFT(FilterParameterValue, 2) LIKE '-[0-9]' OR LEFT(FilterParameterValue, 2) LIKE '+[0-9]' THEN 1 ELSE 0 END DESC, -- group for numbers
  CASE WHEN ISNUMERIC(FilterParameterValue) = 1 THEN CAST(FilterParameterValue AS MONEY) ELSE NULL END ASC, -- order the numeric values
  CASE WHEN LEFT(FilterParameterValue, 1) LIKE '[A-Za-z]' THEN 1 ELSE 0 END DESC, -- group for chars from A to Z (capital / non capital)
  colName

demo on dbfiddle.uk

答案 1 :(得分:0)

尝试按正则表达式使用正则表达式。例如:

ORDER BY IF(FilterParameterValue RLIKE'^ [a-z]',1,2),FilterParameterValue

答案 2 :(得分:0)

您可以尝试将强制转换为数字类型然后排序

SELECT * FROM table_name ORDER BY TRY_CAST(Column_Name as Type)