PostgreSQL:检查子字符串是否在字符串中,如果为true,则用子字符串替换整个字符串

时间:2017-09-14 19:51:20

标签: sql postgresql

我在这样的表中有一个列:

|  biz_name   |
---------------
| www.Dog.com | 
| Dog LLC.    |
| Dog Inc.    |
| www.Cat.com |
| Cat Corp    |

对于列中的每个元素,我想检查它是否包含子串'Dog'或'Cat',如果它包含,则用'Dog'或'Cat'替换整个字符串。

结果应该是:

| biz_name |
---------------
| Dog | 
| Dog |
| Dog |
| Cat |
| Cat |

有没有办法在不使用CASE WHEN的情况下执行此操作:

    CASE 
    WHEN biz_name ilike '%Dog%' THEN 'Dog'
    WHEN biz_name ilike '%Cat%' THEN 'Cat'
    ELSE biz_name END as biz_name    

上表只是一个示例,用于演示我正在尝试做什么,但我正在处理的实际表中有更多的子串我正在尝试搜索并使用多个CASE WHEN语句替换它变得单调乏味。有没有人有更有效的方法来做到这一点?感谢。

1 个答案:

答案 0 :(得分:0)

1)你能快速插入临时表

吗?
--assuming table name is biz

declare @name varchar(max)
declare @TEMP table (Name varchar(max))

-- insert all your values
insert into @TEMP values ('dog')
insert into @TEMP values ('cat')


set @name = select top 1 name from @TEMP
delete from @temp where name = @name -- remove from que /table

WHILE @name IS NOT NULL
BEGIN

 update dbo.biz 
  set biz_name = @name 
 where biz_name like '%' + @name '%'

 set @name = select top 1 name from @TEMP
 delete from @TEMP where name = @name
END