Sql 如何在带有美元符号的字符串上使用Postgres正则表达式匹配?

Sql 如何在带有美元符号的字符串上使用Postgres正则表达式匹配?,sql,postgresql,dollar-quoting,Sql,Postgresql,Dollar Quoting,我在SELECT语句中使用~*运算符来搜索字符串的各个部分 我遇到的问题是一个以美元符号开头/结尾的特殊字符串 从“艺术家”中选择“艺术家”。*其中(名称~*'$uicideBoy$) 如果我删除$,它会正常工作。但当我把它们包括进来时,就没有结果了 要明确的是,艺术家的名字字面上是$uicideBoy$,这就是我希望能够~*匹配的基础。。我隐约知道Postgres的“dollar quoting”,我认为这可能是造成问题的原因……我只是不知道如何解决它。我要么用反斜杠避开$,要么将其加倍以避免

我在SELECT语句中使用
~*
运算符来搜索字符串的各个部分

我遇到的问题是一个以美元符号开头/结尾的特殊字符串

从“艺术家”中选择“艺术家”。*其中(名称~*'$uicideBoy$)

如果我删除
$
,它会正常工作。但当我把它们包括进来时,就没有结果了


要明确的是,艺术家的名字字面上是
$uicideBoy$
,这就是我希望能够~*匹配的基础。。我隐约知道Postgres的“dollar quoting”,我认为这可能是造成问题的原因……我只是不知道如何解决它。

我要么用反斜杠避开
$
,要么将其加倍以避免任何正则表达式冲突,要么使用不同的运算符,例如(不区分大小写):


~*
运算符不区分大小写,与regexp匹配。在regexp中,美元符号表示下线(行尾)。如果要搜索文字值,则应该使用反斜杠转义特殊的regexp字符。考虑:
选择“$abc$”~*'$abc$”、“$abc$”~*'\$abc\$”
SELECT 
  '$fOO$Bar$' ~* $$$$foo$$bar$$$$,
  '$fOO$Bar$' ~* '\$foo\$bar\$',
  '$fOO$Bar$' ILIKE '%$foo$bar$%';

 foo$$bar$$$$ | ?column? | ?column? 
--------------+----------+----------
 t            | t        | t
(1 Zeile)