拆分后SQL对数字字符串排序
我目前在一个表格列中有char值,其格式为“ IS-”,然后是1到5个数字,可能的句点可以是2个数字,也可以是一个字母。
示例为IS-1,IS-12,IS-123,IS-123.11,IS-123.a。
我需要分割字符串,以便仅抓取数字部分,对字符串ASC进行排序,然后将字符串重新组合在一起。
解释。我有以下一组值,IS-1170, IS-1171, IS-1172, IS-1173, IS-1174, IS-870.a, IS-871.a,
IS-872.a.如您所见,因为IS-1在IS-8之前,所以它们按数字顺序排序。
知道从哪里开始吗?我当时在考虑使用CASE,但我不确定如何继续。
谢谢。
回答:
在您的字符串函数中ORDER BY
仅删除数字。这样的事情应该起作用:
SELECT colFROM table
ORDER BY CAST(CASE WHEN ISNUMERIC(SUBSTRING(col,4,20)) = 1
THEN SUBSTRING(col,4,20)
ELSE LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1)
END AS NUMERIC)
这将首先删除IS-
和检查字符串的其余部分是否为数字。如果是这样,它将保留小数位数,否则将删除.
和后面的字母字符。
假设在数字小数位的情况下,您预期的顺序为:
IS-123.AIS-123.1
IS-123.2
如果您不关心小数点/句号后面的内容,则只需:
ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)
以上是 拆分后SQL对数字字符串排序 的全部内容, 来源链接: utcz.com/qa/403804.html