首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中获取值的Regex

在SQL中获取值的Regex
EN

Stack Overflow用户
提问于 2018-12-04 03:19:03
回答 1查看 107关注 0票数 0

我试图读取SQL键值中的值,即UPDATE、SET、FROM和WHERE。使用regex,我可以得到值,直到where子句后面的第一行,但无法得到完整的where子句。请建议一下。

需要从其中获取值的示例SQL。

代码语言:javascript
复制
 UPDATE dbname.tablename  
    SET
    alias1=T1.col1,
    alias2=T1.col2
    FROM datafabric_cfd_dea.T1 T1 
    WHERE
    tablename.keycol =T1.keycol
    AND tablename.col3='ABC'
    AND T1.col3='ABC'
    AND tablename.col3=T1.col3
    AND T1.col2='XYZ';

Regex:

代码语言:javascript
复制
UPDATE\s*(.*)\s*SET\s*(.*)\s*FROM\s*(.*)\s*WHERE\s*(.*)

请建议一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 03:32:35

我不认为正则表达式是最合适的工作工具。当我们在Python生态系统中运行时,我们很幸运能够在PyPI上使用大量第三方软件包的强大功能。有一个名为sqlparse的流行包,它实现了一个SQL解析器。

您可以解析SQL语句并分析解析的令牌:

代码语言:javascript
复制
In [1]: import sqlparse

In [2]: sql = """ UPDATE dbname.tablename  
   ...:     SET
   ...:     alias1=T1.col1,
   ...:     alias2=T1.col2
   ...:     FROM datafabric_cfd_dea.T1 T1 
   ...:     WHERE
   ...:     tablename.keycol =T1.keycol
   ...:     AND tablename.col3='ABC'
   ...:     AND T1.col3='ABC'
   ...:     AND tablename.col3=T1.col3
   ...:     AND T1.col2='XYZ';"""

In [3]: parsed_sql = sqlparse.parse(sql)

# get the where clause
In [4]: where_clause = next(token for token in parsed_sql[0].tokens 
                            if isinstance(token, sqlparse.sql.Where))

In [5]: where_clause.tokens
Out[5]: 
[<Keyword 'WHERE' at 0x10FCD1A78>,
 <Newline ' ' at 0x10FCD1668>,
 <Whitespace ' ' at 0x10FCD1B48>,
 <Comparison 'tablen...' at 0x10FCCDB50>,
 <Newline ' ' at 0x10FCD1AE0>,
 ...
 <Comparison 'T1.col...' at 0x10FCCDD50>,
 <Punctuation ';' at 0x10FCF5EF0>]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53605214

复制
相关文章

相似问题

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