我必须以以下方式清理一些varchar:
!, @, #, $, %, ^, &, *, (, ), }, {, [, ], ",", ., ?, /, ',从封闭列表中删除特殊字符,例如:。我已经通过大量使用replace \ regexp_replace做到了这一点,但是我正在寻找与SQL Server类似的东西。
!, @, #, $, %, ^, &, *, (, ), }, {, [, ], ",", ., ?, /, ',
删除以下数字,但不要删除相邻的数字,这意味着:
round 1 --> round round1 --> round1 round 12345 --> round round12345 --> round12345
round 1 --> round
round1 --> round1
round 12345 --> round
round12345 --> round12345
more food or drinks ---> more food drinks. and not --> me food or drinks
我正在一张大桌子上工作,我想使其尽可能高效。 我应该编写一个执行该操作的函数还是有一种更优雅的方法?
我会一起玩的。这是 问题2 :
SELECT trim(regexp_replace( '12 foo1 run 1457 ABC 1Foo 2456 bar 34', '\s*\m\d+\M\s*', ' ', 'g' ));
返回值:
foo1 run ABC 1Foo bar
我更新了答案,使用 约束表达式 而不是方 括号表达式 ,因为该手册告知:
通常最好使用下面描述的约束转义;它们不再是标准的,但更易于键入。
\s*..零个或多个空白 \m..单词的开头(与相同[[:<:]]) \d+.. 1个或更多的数字 \M..单词的结尾(与相同[[:>:]])
\s*
\m
[[:<:]]
\d+
\M
[[:>:]]
'g'需要第4个参数来替换“全局”,而不仅仅是第一次出现。
'g'
-> v9.2的sqlfiddle- > v8.4的sqlfiddle不起作用
standard_conforming_strings。v9.1更改了默认设置。
standard_conforming_strings
可以说,这 在两个世界都适用,即“兼容模式”。但是,上述现代版本(与结合使用standard_conforming_strings = on)的语法更加简洁。
standard_conforming_strings = on
SELECT trim(regexp_replace( '12 foo1 run 1457 ABC 1Foo 2456 bar 34', E'\\s*\\m\\d+\\M\\s*', ' ', 'g' ));
-> sqlfiddle