簡體   English   中英

PostgreSQL:檢查子字符串是否在字符串中,如果為true,則用子字符串替換整個字符串

[英]PostgreSQL: Check if substring is in a string and if true then replace the entire string with the substring

我在這樣的表中有一列:


|  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)您可以快速插入到臨時表嗎

--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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM