SQL 服务器按条款排序
SQL Server Ordery By Clause
我在 SQL 服务器 Table 中有以下格式的数据。列的数据类型是 nVarchar
(File # 1) abcde
(File # 3) abdddd
(File # 4) asdfas
(File # 7) ououoiu
(File # 6) ooiuoi
(File # 5) werwer
(File # 2) oiouoiu
(File # 10) xcvzx
(File # 11) cxzvz
(File # 20) zxcvzx and so on....
当我在上述列中使用 order by 子句时,我得到如下结果...
(File # 1) abcde
(File # 10) xcvzx
(File # 11) cxzvz
(File # 2) oiouoiu
(File # 20) zxcvzx
(File # 3) abdddd
(File # 4) asdfas
(File # 5) werwer
(File # 6) ooiuoi
(File # 7) ououoiu
如何修复....
如果格式总是相同 (file # .....)
有一个简单的解决方案:
order by charindex(')', col), col
编辑:
这会提取 第一组数字 并将其转换为 INT
ORDER BY
CAST(CASE WHEN PATINDEX('%[0-9]%',col) > 0
THEN SUBSTRING(SUBSTRING(col,PATINDEX('%[0-9]%',col),100), 1, PATINDEX('%[^0-9]%', SUBSTRING(col,PATINDEX('%[0-9]%',col),100)+'#')-1)
ELSE '0'
END AS FLOAT)
,col
如果 SQL 服务器支持正则表达式会容易得多:-)
我在 SQL 服务器 Table 中有以下格式的数据。列的数据类型是 nVarchar
(File # 1) abcde
(File # 3) abdddd
(File # 4) asdfas
(File # 7) ououoiu
(File # 6) ooiuoi
(File # 5) werwer
(File # 2) oiouoiu
(File # 10) xcvzx
(File # 11) cxzvz
(File # 20) zxcvzx and so on....
当我在上述列中使用 order by 子句时,我得到如下结果...
(File # 1) abcde
(File # 10) xcvzx
(File # 11) cxzvz
(File # 2) oiouoiu
(File # 20) zxcvzx
(File # 3) abdddd
(File # 4) asdfas
(File # 5) werwer
(File # 6) ooiuoi
(File # 7) ououoiu
如何修复....
如果格式总是相同 (file # .....)
有一个简单的解决方案:
order by charindex(')', col), col
编辑:
这会提取 第一组数字 并将其转换为 INT
ORDER BY
CAST(CASE WHEN PATINDEX('%[0-9]%',col) > 0
THEN SUBSTRING(SUBSTRING(col,PATINDEX('%[0-9]%',col),100), 1, PATINDEX('%[^0-9]%', SUBSTRING(col,PATINDEX('%[0-9]%',col),100)+'#')-1)
ELSE '0'
END AS FLOAT)
,col
如果 SQL 服务器支持正则表达式会容易得多:-)