mysql—删除列存储过程每个条目的前5个字符

qlvxas9a  于 2021-07-24  发布在  Java
关注(0)|答案(6)|浏览(361)

我预订了一张table,在那张table上有一列叫做campground。营地栏的每个入口与其他入口非常相似,例如:
阿尔贝/阿尔伯塔海滩家庭房车公园
有人能告诉我如何使用一个存储过程来删除这个列中每个条目的前5个字符吗?这个存储过程会删除这个列中每个条目的5个字符?
到目前为止,我尝试的代码如下:

UPDATE reservation
SET RIGHT(campground, LEN(campground) - 5)

有人能帮我创建一个具有上述功能的存储过程吗?
谢谢!!

vd8tlhqk

vd8tlhqk1#

您真的要删除字符串的前5个字符,还是要删除第一个正斜杠之前的所有字符?
这里的其他答案解决了你的字面问题。这回答了您可能真正要问的问题(postgresql方言):

select substr(campground,position('/' in campground)+1)
from (values
     ('ABC/American Bike Camp')
    ,('ALBE/Alberta Beach Family RV Park')) t(campground)
;
substr
------------------------------
 American Bike Camp
 Alberta Beach Family RV Park
(2 rows)

在update语句中使用该表达式:

update reservation
set campground = substr(campground,position('/' in campground)+1)
where campground like '%/%'
;

(包含where子句以确保它不会更新已更新的行)

vpfxa7rd

vpfxa7rd2#

你可以用 substring 带起始位置的函数

select substring(campground from 6);
blpfk2vs

blpfk2vs3#

在mysql中,您可以使用非常简单的查询:

UPDATE reservation
SET campground = MID(campground, 6);

在postgresql中使用 substring 相反 mid :

UPDATE reservation
SET campground = substring(campground, 6);

小心,此查询将更改源数据,而不使用回滚选项。

wdebmtf2

wdebmtf24#

未能在set子句中提供列名:

UPDATE reservation
SET campground = RIGHT(campground, LEN(campground) - 5)
vktxenjb

vktxenjb5#

我只想用 substr() ,使表达式更简单:

substr(campground, 6)

mysql和postgres都支持这种语法。
如果需要更新查询,则:

update reservation set campground = substr(campground, 6)
t9aqgxwy

t9aqgxwy6#

你可以用 split_part() 在postgresql中

UPDATE reservation
   SET campground = split_part(campground, '/', 2)

相关问题