PostgreSQL:提取数字前纯字母,无数字时保留原内容
PostgreSQL提取数字前文本并保留无数字原内容
要实现提取列内数字之前的纯字母(含空格)内容,同时在无数字时保留原文本,可通过正则匹配+条件判断结合PostgreSQL的字符串函数实现:
核心SQL语句
SELECT medication_title, CASE -- 判断字符串是否包含数字 WHEN medication_title ~ '\d' THEN -- 替换掉第一个数字及后续所有内容,再去除末尾多余空格 TRIM(regexp_replace(medication_title, '\d.*', '', 'g')) -- 无数字时直接返回原内容 ELSE medication_title END AS medication_commercialname FROM your_table_name;
语句解释
medication_title ~ '\d':使用正则匹配运算符~判断字段是否包含数字(\d表示任意数字字符)。regexp_replace(medication_title, '\d.*', '', 'g'):将字符串中第一个数字及之后的所有内容替换为空字符串(\d.*匹配从第一个数字开始到结尾的所有字符)。TRIM():去除替换后可能残留的末尾空格,保证结果格式整洁。CASE WHEN:实现条件分支,仅在存在数字时应用提取规则,否则保留原内容。
输入输出对比
输入数据
| medication_title |
|---|
| GLYXAMBI 25 MG E 5 MG |
| GLIFAGE XR 750 MG |
| AD TIL |
| SIMETICON GOTAS |
输出结果
| medication_title | medication_commercialname |
|---|---|
| GLYXAMBI 25 MG E 5 MG | GLYXAMBI |
| GLIFAGE XR 750 MG | GLIFAGE XR |
| AD TIL | AD TIL |
| SIMETICON GOTAS | SIMETICON GOTAS |
内容的提问来源于stack exchange,提问作者Mariana
相关产品推荐
相关产品推荐

