我目前在一个表格列中有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之前,所以它们按数字顺序排序。
IS-1170, IS-1171, IS-1172, IS-1173, IS-1174, IS-870.a, IS-871.a, IS-872.a.
知道从哪里开始吗?我当时在考虑使用CASE,但我不确定如何继续。
谢谢。
在您的字符串函数中ORDER BY仅删除数字。这样的事情应该起作用:
ORDER BY
SELECT col FROM 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-
.
假设在数字小数位的情况下,您预期的顺序为:
IS-123.A IS-123.1 IS-123.2
如果您不关心小数点/句号后面的内容,则只需:
ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)