sql - 从字符串的开头提取所有数字?
问题描述
我有一张表,其中包含我要清理的一些不良数据。
字段示例如下
36234735HAN876
2342JOE9823
554444PUT003
我想要做的是删除第一个字母字符之前的所有数字字符,如下所示:
HAN876
JOE9823
PUT003
实现这一目标的最佳方法是什么?我使用了以下方法,但这只能用于从字符串中提取所有数字,而不是字母字符之前的数字
解决方案
您可以使用PATINDEX
来定位字符串中字母字符的第一个位置,然后使用SUBSTRING
仅返回该位置之后的字符来实现此目的:
CREATE TABLE #temp (val VARCHAR(50));
INSERT INTO #temp VALUES ('36234735HAN876'), ('2342JOE9823'), ('554444PUT003'), ('TEST1234');
SELECT val,
SUBSTRING(val, PATINDEX('%[A-Z]%', val), LEN(val)) AS output
FROM #temp;
DROP TABLE #temp;
输出:
val output
36234735HAN876 HAN876
2342JOE9823 JOE9823
554444PUT003 PUT003
TEST1234 TEST1234
请注意,我创建了一个临时表,其中有一列名为val
. 您应该将其更改为与实际调用的任何列一起使用。
关于区分大小写:如果您使用不区分大小写的排序规则,这将毫无问题。如果您的排序规则区分大小写,那么您可能需要更改匹配的模式以适应大写和小写字母。
推荐阅读
- c# - 如何使用最短路径返回多个节点?
- spring - 错误:在 Spring boot kotlin 新项目中找不到或加载主类
- python - Python face_recognition 数据集质量
- django - Django 3.0 + 频道 + ASGI + TokenAuthMiddleware
- bash - 使用bash将表格转换为文本文件中的逗号分隔
- android - Google Assistant Action - 隐式调用体验
- matlab - 如何创建具有逻辑变量的数组并在 for 循环中遍历这些变量?
- c# - 使用 SQL 和 LDAP 验证登录
- ubuntu - modprobe module.ko 上的“PKCS#7 签名未使用受信任的密钥签名”错误
- c++ - 如何遍历可变参数模板函数中的可变参数元组?