sql - 检查一个字符串是否有特定的结尾,删除这个结尾,然后根据其他两个条件写入这些字符串
问题描述
我必须从“sil.catalog_no”中提取字符串。
首先,我必须检查一个字符串是否以'-UW'结尾并删除它。
之后,我必须提取该字符串(已经没有-UW),但是在第一个'-'或第二个'-'之前没有第一部分,这取决于第一个'-'之前是否有'US'。
我知道它搞砸了,但我不知道如何用其他方式描述它。
我已经用 CHARINDEX 尝试了 SUBSTRING、LEFT、RIGHT 和一些东西,但是我的程序/数据库/sql 版本(?)似乎没有对这些东西进行操作,除了提到的这些之外,我找不到任何其他解决方案。也许是因为我没有正确使用它们,我不知道。
sil.catalog_no 中包含的字符串示例如下:
HU-98010587
US-HU-88136FYT-719-UW
所以,在第一个例子中,我只需要检查最后是否有'-UW'。没有,所以我进入第二步,删除“HU-”并提取剩下的“98010587”。
对于第二个,我想检查并从最后删除“-US”。然后我想擦除整个“US-HU-”,因为首先有“US”,我想得到“88136FYT-719”。
编辑:
重新思考问题后,我想我想知道擦除字符串特定部分的方法。查看我提供的图像,我想删除结果中出现的所有“HU-”、“EMC-”、“US-”和“-UW”。
解决方案
好的,我认为该功能regexp_replace
可以解决您的问题。如下:
postgres=# select regexp_replace(regexp_replace('US-HU-88136FYT-719-UW','^([A-Z]+-)+',''),'(-[A-Z]+)+$','') as result;
result
--------------
88136FYT-719
(1 row)
postgres=# select regexp_replace(regexp_replace('HU-98010587','^([A-Z]+-)+',''),'(-[A-Z]+)+$','') as result;
result
----------
98010587
(1 row)
postgres=# select regexp_replace(regexp_replace('EMC-C13-PWR-7','^([A-Z]+-)+',''),'(-[A-Z]+)+$','') as result;
result
-----------
C13-PWR-7
或者我们'HU-', 'EMC-', 'US-', '-UW'
更精确地删除,如下所示:
postgres=# select regexp_replace(regexp_replace('HU-98010587','^(HU-|EMC-|US-)+',''),'(-UW)+$','') as result;
result
----------
98010587
(1 row)
postgres=# select regexp_replace(regexp_replace('US-HU-88136FYT-719-UW','^(HU-|EMC-|US-)+',''),'(-UW)+$','') as result;
result
--------------
88136FYT-719
(1 row)
postgres=# select regexp_replace(regexp_replace('EMC-C13-PWR-7','^(HU-|EMC-|US-)+',''),'(-UW)+$','') as result;
result
-----------
C13-PWR-7
(1 row)
postgres=# select regexp_replace(regexp_replace('US-HU-88134UGQ-UW','^(HU-|EMC-|US-)+',''),'(-UW)+$','') as result;
result
----------
88134UGQ
我认为上面的两个正则表达式可能都会得到正确的结果,而第二个将准确地满足您的需求。就试一试吧。
推荐阅读
- javascript - 仅使用 javascript 和 html 读取 csv 或 excel (xlsx) 文件?
- groovy - 如何在groovy中将输入转换为大写
- javascript - 检查列标题标题是否与字符串匹配,如果匹配则返回列索引
- android - 可以为库项目跳过 TargetSdkVersion(27 到 29)吗?
- javascript - 如何为这段代码编写 Jasmine 单元测试
- angular -
从上层组件。角 7 - azure-cosmosdb - 重新运行 Lease Collection 中的所有更改
- c# - 打开和关闭文件夹中的所有 Excel 文件
- angular - primeNG 升级到 8.0.1 错误加载 DataTable
- testcontainers - 测试容器中的 GenericContainer 应该如何参数化?