如何在不使用 SQL 中的函数的情况下仅从字符串中提取数字

How to Extract only numbers from the String without using function in SQL

Table 包含如下数据

Table 名字是 REGISTER

列名称是 EXAM_CODE

值如 ('S6TJ','S7','S26','S24')

我想要如下答案

结果集->(6,7,26,24)

请提出解决方案 - 因为 regexp_replace 无法识别 SQL 中的内置函数名称。

答案的复杂性取决于两件事:使用的 RDBMS 以及 EXAM_CODE 中的数字是否连续。

我假设 RDBMS 是 SQL 服务器并且 EXAM_CODE 中的数字总是连续的。如果没有,请指教,我可以修改答案。

下面的 SQL 显示了使用 PATINDEX.:

完成上述任务的方法
CREATE TABLE #REGISTER (EXAM_CODE VARCHAR(10));
INSERT INTO #REGISTER VALUES ('S6TJ'),('S7'),('S26'),('S24');

SELECT  LEFT(EXAM_CODE, PATINDEX('%[^0-9]%', EXAM_CODE) - 1)
  FROM  (
        SELECT  RIGHT(EXAM_CODE, LEN(EXAM_CODE) - PATINDEX('%[0-9]%', EXAM_CODE) + 1) + 'A' AS EXAM_CODE
          FROM  #REGISTER
        ) a

DROP TABLE #REGISTER

这输出:

6
7
26
24

PATINDEX 将指定模式与字符串匹配(如果没有匹配,则 returns 0)。

使用这个,内部查询在数字第一次出现后获取所有字符串。然后,外部查询会去除可能出现在字符串末尾的任何文本。

注意:字符 A 附加到内部查询的结果中,以确保外部查询中的 PATINDEX 检查将进行匹配。否则,PATINDEX 会 return 0 并且会发生错误。