如何在BigQuery SQL中去除字符串末尾的字母?
如何用SQL去除ID末尾的字母?
当然可以,根据你使用的数据库类型,有多种实现方式,核心是匹配并移除字符串末尾的所有字母。以下是主流数据库的解决方案:
MySQL/MariaDB
使用REGEXP_REPLACE函数匹配末尾的字母并替换为空:
SELECT id, REGEXP_REPLACE(id, '[A-Za-z]+$', '') AS cleaned_id FROM your_table;
[A-Za-z]+$ 表示匹配字符串末尾连续的一个或多个大小写字母,将其替换为空即可得到清理后的ID。
PostgreSQL
同样使用REGEXP_REPLACE,语法略有差异:
SELECT id, REGEXP_REPLACE(id, '[A-Za-z]+$', '', 'g') AS cleaned_id FROM your_table;
这里的'g'参数表示全局替换,不过因为我们只匹配末尾的字母,不加也能正常工作,但加上更严谨。
SQL Server
2017及以上版本(支持正则)
直接用REGEXP_REPLACE:
SELECT id, REGEXP_REPLACE(id, '[A-Za-z]+$', '') AS cleaned_id FROM your_table;
旧版本(不支持正则)
可以通过PATINDEX定位最后一个数字的位置,再截取字符串:
SELECT id, LEFT(id, PATINDEX('%[0-9][^0-9]*$', id)) AS cleaned_id FROM your_table;
PATINDEX('%[0-9][^0-9]*$', id) 会找到最后一个数字的位置,LEFT函数截取到该位置即可保留数字及前面的部分。
Oracle
两种常用方式:
- 使用
REGEXP_REPLACE:
SELECT id, REGEXP_REPLACE(id, '[A-Za-z]+$', '') AS cleaned_id FROM your_table;
- 使用
REGEXP_SUBSTR匹配到最后一个数字为止的部分:
SELECT id, REGEXP_SUBSTR(id, '^.*[0-9]') AS cleaned_id FROM your_table;
^.*[0-9] 表示匹配从字符串开头到最后一个数字的所有字符,自动忽略末尾的字母。
内容的提问来源于stack exchange,提问作者user3379798
相关产品推荐
相关产品推荐

