Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regexp搜索SQL查询字段_Sql_Regex_Postgresql - Fatal编程技术网

Regexp搜索SQL查询字段

Regexp搜索SQL查询字段,sql,regex,postgresql,Sql,Regex,Postgresql,我有一个SQL查询存储库,我想了解哪些查询使用某些表或字段 假设我想了解哪些查询使用电子邮件字段,我如何编写它 SQL查询示例: select users.email as email_user ,users.email as email_user_too ,email as email_user_too_2 email as email_user_too_3, back_email as wrong_email -- wrong field from u

我有一个SQL查询存储库,我想了解哪些查询使用某些表或字段

假设我想了解哪些查询使用电子邮件字段,我如何编写它

SQL查询示例:

select
    users.email as email_user
    ,users.email as email_user_too
    ,email as email_user_too_2
    email as email_user_too_3,
    back_email as wrong_email -- wrong field
from users

因此,为了更准确地说明问题,您正在对SQL查询列表[作为文本]进行排序,现在需要在
PostgreSQL
中使用SQL&
RegEx
(正则表达式)查找使用特定字段的查询。(请标记问题,以便正确索引您的问题,更重要的是,读者对问题有更多的了解)

PostgreSQL的正则表达式支持OOTB(开箱即用)。因此,我们跳过了探索其他方法来实现这一点。(如果您是以Microsoft SQL Server人员的身份阅读本文,那么我强烈建议您阅读关于定义表值UDF(用户定义函数)的内容)

我能想到的解决问题的最简单方法是,首先从查询文本中扔掉我们不想要的内容,然后过滤掉剩下的内容

这样,在扔掉你不需要的东西之后,你会得到一组“令牌”,你可以很容易地过滤,我把令牌放在引号里,因为我们没有真正解析SQL语言,但如果我们这样做了,那将是第一步:提取令牌。。(:

以这个查询为例:

With Queries (
    Id
,   QueryText
) As (
values (1, 'select
    users.email as email_user
    ,users.email as email_user_too
    ,email as email_user_too_2,
    email as email_user_too_3,
    back_email as wrong_email -- wrong field
from users')
)
Select  QueryText
    ,   found
    From    (
        Select  Id
            ,   QueryText
            ,   regexp_split_to_table (QueryText, '(--[\s\w]+|select|from|as|where|[ \s\n,])') As found
            From    Queries
    )   As  Result
    Where   found   !=  ''
    And     found   =   'back_email'
  • 我已经用
    with
    语句获得了“查询存储库”的概念,以便于编写伪代码
  • 我还选择了一些单词/字符来拆分
    QueryText
    。例如
    select
    where
    等。我们的“find”集中不需要这些
  • 最后,正如您在上面看到的,我只是使用
    查找
    作为剩下的内容,并使用您要查找的字段名对其进行过滤。(假设您知道您要查找的字段)
您可以改进我使用的正则表达式,或者根据您的意愿更改方法以使其更好。但我认为一般的概念解决了您需要实现的问题。我可以立即看到我的解决方案的一个问题是,您可以搜索任何东西,而不仅仅是所选字段的名称,这就引出了一个问题,为什么要使用正则表达式例如,而不是像语句那样的
?但是,正如我所提到的,您可以改进正则表达式并满足您可能有的特定需求。像
一样使用
可能会限制您在这一方向上。(换句话说,只有您知道什么对您有利。我不能从这里这样说。)

您可以在此处在线使用查询:并用于测试您的正则表达式


免责声明我不是PostgreSQL开发人员。必须有其他可能更好的方法来做到这一点。(

这是什么类型的存储库?(您是将查询存储在sql文件中还是存储为存储过程?视图?)我存储原始数据库查询我理解。你如何存储它们?也就是说,该人编写了请求,完成了请求,并将其保存为文本文件,yeapOkay-因此当时存储为文本文件。现在-请帮助我理解,你是否试图查找别名错误的字段?(返回错误邮件的位置?)天哪,谢谢!!!别担心!希望能有帮助。祝你好运!(: