我在postgres 11.0有下表
atc_code_no code level text
1 A 1 ALIMENTARY TRACT AND METABOLISM
2 A01 2 STOMATOLOGICAL PREPARATIONS
3 A01A 3 STOMATOLOGICAL PREPARATIONS
3 A01W 3 (herbal stomatological remedies
4 A01AA 4 Caries prophylactic agents
5 A01AB 4 Antiinfectives and antiseptics for local oral treatment
7 A01AD 4 Other agents for local oral treatment我用' with‘语句编写了以下查询,然后使用左联接和子字符串匹配连接表。
with level1 as(
select CONCAT("code", ' (', lower("text"), ')') as atc_code_level1 from s0_atc_code
where level = '1'
),
level2 as(
select CONCAT("code", ' (', lower("text"), ')') as atc_code_level2 from s0_atc_code
where level = '2'
) ,
level3 as(
select CONCAT("code", ' (', lower("text"), ')') as atc_code_level3 from s0_atc_code
where level = '3'
) ,
level4 as(
select CONCAT("code", ' (', lower("text"), ')') as atc_code_level4 from s0_atc_code
where level = '4'
)
SELECT level1.*,
level2.*,
level3.*,
level4.*
FROM level1
LEFT JOIN level2 ON btrim(SUBSTRING(level2.atc_code_level2, '(.*) \(')) ~ btrim(SUBSTRING(level1.atc_code_level1, '(.*) \('))
LEFT JOIN level3 ON btrim(SUBSTRING(level3.atc_code_level3, '(.*) \(')) ~ btrim(SUBSTRING(level2.atc_code_level2, '(.*) \('))
LEFT JOIN level4 ON btrim(SUBSTRING(level4.atc_code_level4, '(.*) \(')) ~ btrim(SUBSTRING(level3.atc_code_level3, '(.*) \('))只要我加入了level1、level2和level3,查询就可以加入并为我提供输出,但是当我加入level4和level3时,我得到了一个错误:
代码: 0,SQL状态: 2201B错误:无效正则表达式:括号()不平衡
下面应该是连接后的输出。
我在Postgres 11.0有下表。
atc_code_level1 atc_code_level2 atc_code_level3 atc_code_level4
A (alimentary tract and metabolism) A01 (stomatological preparations) A01A (stomatological preparations) A01AD (other agents for local oral treatment)
A (alimentary tract and metabolism) A01 (stomatological preparations) A01A (herbal stomatological remedies) A01AA (caries prophylactic agents)
A (alimentary tract and metabolism) A01 (stomatological preparations) A01A (herbal stomatological remedies) A01AB (antiinfectives and antiseptics for local oral treatment)任何帮助都是非常感谢的。
发布于 2021-04-12 08:33:08
这个错误意味着正则表达式有一个错误,因为这个记录:
3 A01W 3(草药口腔疗法)
有一个左括号-- "(",当你使用x~ y时,y只有左括号-这些“,所以你得到了那个异常。
解决方案:也许您可以在加入之前将数据清理到s0_atc_code:
update s0_atc_code set text = regexp_replace(text,'[()*]',' ','g')删除"(",")","*“,以避免正则表达式异常。
https://stackoverflow.com/questions/65776057
复制相似问题