首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:无效正则表达式:在Postgres 11.0中执行左联接时括号()不平衡

错误:无效正则表达式:在Postgres 11.0中执行左联接时括号()不平衡
EN

Stack Overflow用户
提问于 2021-01-18 14:08:12
回答 1查看 2K关注 0票数 1

我在postgres 11.0有下表

代码语言:javascript
运行
复制
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‘语句编写了以下查询,然后使用左联接和子字符串匹配连接表。

代码语言:javascript
运行
复制
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有下表。

代码语言:javascript
运行
复制
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)

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 08:33:08

这个错误意味着正则表达式有一个错误,因为这个记录:

3 A01W 3(草药口腔疗法)

有一个左括号-- "(",当你使用x~ y时,y只有左括号-这些“,所以你得到了那个异常。

解决方案:也许您可以在加入之前将数据清理到s0_atc_code:

代码语言:javascript
运行
复制
update s0_atc_code set text = regexp_replace(text,'[()*]',' ','g')

删除"(",")","*“,以避免正则表达式异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65776057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档