当前位置: 首页 > 面试题库 >

拆分后SQL对数字字符串排序

萧越泽
2023-03-14
问题内容

我目前在一个表格列中有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 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-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)


 类似资料:
  • 我在尝试将此代码提交给hackerrank时出现以下错误:https://www.hackerrank.com/challenges/contacts/problem: 线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:结果为1。联系人(Solution.java:31)位于Solution。main(Solution.java:66) 然

  • 问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 问题内容: 输入示例: 输出示例: 字母和数字部分的长度不固定。 我知道如何将split()与regex一起使用,但是尽管我检查了Java API,但找不到任何可以帮助我解决此问题的东西。 有没有办法做到这一点?或者我需要使用另一种方法来拆分这些字符串。 任何帮助,将不胜感激。 问题答案: 试试这个正则表达式: 这是一个正在运行的示例:http : //ideone.com/c02rmM 正则表达

  • 问题内容: 我需要将一个String拆分为单个字符String的数组。 例如,拆分“ cat”将得到数组“ c”,“ a”,“ t” 问题答案: 这将产生

  • 问题内容: 我有一个名为的字符串,其形式像这样 。 我想使用:分隔符。 这样一来,单词将被拆分成自己的字符串,并将成为另一个字符串。 然后我只想使用2种不同的字符串来显示该字符串。 解决这个问题的最佳方法是什么? 问题答案: 你可能要删除第二个字符串的空格: 如果要用特殊字符(例如dot(。))分割字符串,则应在点之前使用转义字符\ 例: 还有其他方法可以做到这一点。例如,你可以使用类(来自):