如何解决如何在不使用SQL函数的情况下仅从字符串中提取数字
表中包含以下数据
表名是REGISTER
列名是EXAM_CODE
(“ S6TJ”,“ S7”,“ S26”,“ S24”)之类的值
我想要下面的答案
结果集->(6,7,26,24)
请提出解决方案-由于无法识别regexp_replace内置在SQL中的函数名称。
解决方法
答案的复杂性取决于两件事:使用的RDBMS以及EXAM_CODE
中的数字是否连续。
我假设RDBMS是SQL Server,并且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
将指定的模式与字符串匹配(如果没有匹配,则返回0)。
使用此方法,内部查询会在数字首次出现后获取所有字符串。然后,外部查询将去除可能出现在字符串末尾的所有文本。
注意:字符A
附加到内部查询的结果上,以确保外部查询中的PATINDEX
检查将匹配。否则,PATINDEX
将返回0并发生错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。