我是SQL的绝对初学者。我知道如何使用属于数据操作语言和数据定义语言的SQL命令。
表格的名称为ways_tags
id,key,value,type
164931009,street,6th Main Road Ram Nagar (N) Extn,addr
标题代表列名,我只打印了一行。
这就是我想要完成的事情:
选择type
为addr
且key
为street
的观察结果。
在此类观察中,扫描value
列的字符,检查后4个字符是否与Extn
匹配,并将其替换为Extension
另外,有没有办法可以减少代码的大小,它会检查两种模式而不是一种?
换句话说
您可以使用
等替换我想要完成的内容。在此类观察中,扫描value
列的字符:
我。如果value
列中的最后4个字符Extn
替换为Extension
。
ii。如果value
列中的最后2个字符St.
替换为Street
。
我真的很抱歉,但我只知道伪代码并且不知道如何将正则表达式与普通SQL结合使用,所以我无法发布任何内容来表明我的情况。我试过了。
所以最终执行完步骤后,
164931009,street,6th Main Road Ram Nagar (N) Extension,addr
是更新的观察,而不是
164931009,street,6th Main Road Ram Nagar (N) Extn,addr
答案 0 :(得分:1)
选择
type
为addr
且key
为street
的观察结果。
...扫描value
列的字符,检查后4个字符是否与Extn
匹配
WHERE type = 'addr'
AND key = 'street'
AND value LIKE '%Extn'
...并将其替换为
Extension
如果值中的其他位置没有出现“Extn
”,则可以使用replace()完成此操作,但在一般情况下,您必须extract除了最后四个字符,并附加新值:
substr(value, 1, length(value) - 4) || 'Extension'
然后将其插入UPDATE语句:
UPDATE ways_tags
SET value = substr(value, 1, length(value) - 4) || 'Extension'
WHERE type = 'addr'
AND key = 'street'
AND value LIKE '%Extn';
使用CASE expression可以在单个语句中执行两次替换,但不会减少代码大小。