如何在不使用 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 并且会发生错误。
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 并且会发生错误。