PostgreSQL的:检查是否串是一个字符串,如果为true,则与子更换整个字符串
问题描述:
我有一台这样的柱:每个元素在列PostgreSQL的:检查是否串是一个字符串,如果为true,则与子更换整个字符串
| 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 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
不管怎样..地方,所以我觉得你的方法实际上是最简单的。 你可以避免重复使用regexp_replace代替两次Dog,并用找到的“令牌”来代替,但我认为这没什么大不了的。 – Dessma
另一个解决方案是更新'update [tableName] set biz_name ='Dog',其中biz_name如'%dog%'' – Andrei
'带有subs(s)as(values('Dog'),('Cat')) test(biz_name)as(values('www.dog.com'),('www.cat.com'),('dog Inc.'))select * from test left join subs on(test.biz_name〜* subs .s);' – Abelisto