如何在SQL中将列值全部用方括号包裹?
解决方法
你的SQL语句问题在于正则表达式的匹配逻辑:(.)会匹配每一个单个字符,执行后会把foo变成[f][o][o],而非你想要的[foo]。另外如果topics字段是NULL或空字符串,这条语句也不会产生任何可见修改。
正确实现方式(推荐)
直接用字符串拼接,比正则更高效:
UPDATE notes SET topics = '[' || topics || ']' WHERE topics IS NOT NULL AND topics <> '';
用正则表达式实现的写法
如果一定要用regexp_replace,需要匹配整个字符串:
UPDATE notes SET topics = regexp_replace(topics, '^(.*)$', '[$1]') WHERE topics IS NOT NULL AND topics <> '';
- 正则
^(.*)$表示匹配从开头(^)到结尾($)的所有字符,$1引用整个匹配内容,从而把整个值包裹在方括号里。 - 加上
WHERE条件是为了避免更新NULL或空值的行,这些行本来就不需要修改。
内容的提问来源于stack exchange,提问作者DarkLeafyGreen
相关产品推荐
相关产品推荐

