提取具有多个条件的字符串 - sql

Posted

技术标签:

【中文标题】提取具有多个条件的字符串 - sql【英文标题】:Extract string with multiple criteria - sql 【发布时间】:2019-01-29 22:37:21 【问题描述】:

我们有一列不同的字符串值,如下所示。如何在 Redshift 中提取部分字符串并返回想要的结果?

例子

    删除以下划线和数字开头的最后一部分(_1_MN,数字可以是 1-1000) 删除前导部分 (Ed_) 用空格替换任何剩余的下划线

字符串: Ed_Westside Ind 学区 94_Williams 小学_1_MN

期望的结果: Westside Ind 学区 94 威廉姆斯小学

【问题讨论】:

postgresql 红移。请删除 postgresql 标志 【参考方案1】:

mysql

UPDATE products 
SET col = SUBSTRING(col FROM 3)
WHERE col LIKE ('Ed_%')

UPDATE products 
SET col = SUBSTRING(col FROM -5 )
WHERE col LIKE ('%_1_MN')

UPDATE products 
SET col = REPLACE(col, '_', ' ')

【讨论】:

谢谢,阿萨莱姆。是否有可以在 Redshift 中运行且无需使用更新的 postgresql 版本? WHERE col LIKE ('%_1_MN') 将不起作用,因为每个结尾数字和字母都不同。 这不是 MYSQL 问题。【参考方案2】:

虽然不是很优雅,但这很有效。

REGEXP_REPLACE(LEFT(RIGHT(name, LEN(name) - 3), LEN(name) -8) , '_', ' ')

【讨论】:

我认为这仅在给出的示例中有效,但如果数字>10 则无效

以上是关于提取具有多个条件的字符串 - sql的主要内容,如果未能解决你的问题,请参考以下文章

具有多个条件的sql where子句c#Web服务[重复]

具有多个字段的 XML 路径的 SQL 东西

SQL Join 一对多从满足条件的相同键值组中提取值

使用具有多个真值的 OR 使用正则表达式提取字符串它返回啥结果?

在 Hive SQL 中提取具有特定模式的子字符串

如何在 LookML 中拆分具有多个分隔符的字符串?