我正在尝试理解SQL查询的一部分,但我不知道它用于什么;有谁可以帮助我?
我知道它想要替换一些东西,但是什么是“”:“(。+)”“,为什么像”store“这样的字符串可以在substring()中使用?
replace((
CASE
WHEN(char_length(substring(xxx_json::text FROM 'Name":"(.+)" , "store')) > 0)
THEN substring(xxx_json::text FROM 'Name":"(.+)" , "store')
ELSE substring(xxx_json::text FROM 'Name":"(.+)" , "employees')
END),'\u0016','''')
答案 0 :(得分:3)
这似乎是进行正则表达式匹配的子字符串的变体。第一个参数xxx_json::text
是要搜索的字符串。第二个参数是要匹配的正则表达式。
请注意,第二个参数由整个SQL字符串文字'Name":"(.+)" , "store'
组成(前两种情况)。除了(.+)
之外,该字符串中的所有内容都应该与要搜索的字符串的一部分字面匹配。 (.+)
是正则表达式语法。点匹配任何字符; a +表示一次或多次出现;括号将此定义为捕获组。在此上下文中,与捕获组匹配的文本将由子字符串返回。
因此,例如,如果要搜索的字符串的内容是一个简单的JSON表达式,如下所示:{ "Name":"John Smith" , "store":"London" }
,正则表达式将匹配,子字符串将返回'John Smith'
。
简而言之,这是一种在SQL中解析JSON以提取Name元素(或其键以Name结尾的元素)的值的一种略微hacky方式。
有关此子字符串形式的详细文档,请参阅https://www.postgresql.org/docs/9.4/static/functions-matching.html中的第9.7.3节。