Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL中的正则表达式替换_Sql_Regex_Postgresql_Replace - Fatal编程技术网

PostgreSQL中的正则表达式替换

PostgreSQL中的正则表达式替换,sql,regex,postgresql,replace,Sql,Regex,Postgresql,Replace,我有一个表,其中一个特定的字符串字段通常包含unicode,用于其中的单引号和双引号:\u0027和\u0022。事实证明,我更需要他们逃走。我需要在他们前面多放一个\ 例如,我需要将\u0027Hello,world\u0027更改为\\u0027Hello,world\\u0027 什么样的SQL可以对表中的所有记录执行这种更新?一个带有SET yourcolumn=REPLACE(yourcolumn'\u0027','\\u0027')的update语句应该这样做。在进行大规模更新之前,

我有一个表,其中一个特定的字符串字段通常包含unicode,用于其中的单引号和双引号:
\u0027
\u0022
。事实证明,我更需要他们逃走。我需要在他们前面多放一个
\

例如,我需要将
\u0027Hello,world\u0027
更改为
\\u0027Hello,world\\u0027


什么样的SQL可以对表中的所有记录执行这种更新?

一个带有
SET yourcolumn=REPLACE(yourcolumn'\u0027','\\u0027')的update语句应该这样做。在进行大规模更新之前,请首先尝试下面的方法以检查它是否有效

SELECT REPLACE('\u0027', '\u0027', '\\u0027')

如果您确实需要此功能,则可以使用以下RE:

UPDATE table SET c = regexp_replace(c, '[^\\]\\(u\d{4})', '\\\\\1', 'g');
确保启用了符合标准的字符串,并且将regex\u flavor设置为advanced

SHOW standard_conforming_strings;
 standard_conforming_strings 
-----------------------------
 on
(1 row)

替换字符串
“\\\\\\\\\\\
意味着后面的两个反斜杠
\
\1
表示第一个(报告)括号内的子表达式(即,
'u'
与模式中的四位数字连接)。

FWIW我正在使用postgresql。如果您还可以告诉我如何强制所有插入和更新之后执行相同的修改,而不以三个斜杠结束,那么您就可以获得额外的积分。您最好使用Unicode将值存储在数据库中,并在需要时执行转义操作-这将在一天结束时变得不那么复杂。这听起来让我非常怀疑。为什么“需要”在数据库中有编码数据?这通常意味着将数据放入或取出的代码存在一些严重问题。数据通常应该以原始的未扫描文本格式保存。@我可以处理数据库,但不能处理任何检索和处理数据的软件。我知道它有严重的问题,但遗憾的是我没有能力去解决这些问题。+ 1看起来很有用,但是它似乎无法检测是否已经执行了双逃逸……这就是问题所在,丹-请花一点时间认真考虑把数据存储在一个更合适的格式中。谢谢。我对此做了两个变体:一个用于处理以unicode转义序列开头的字符串,另一个将保留\u前面的字符(您提供的版本使用它)。我还不得不将反斜杠的数量增加一倍,因为我们的db不使用符合标准的字符串。讨厌的东西,但它奏效了。@Dan:你也可以用美元报价$$pattern$$来避免双重反斜杠