【问题标题】:Regex between word and end of text单词和文本结尾之间的正则表达式
【发布时间】:2020-06-09 05:39:12
【问题描述】:

我正在尝试编写一个正则表达式来将 SQL 查询分解为更小的子查询。给定这样的查询:

create unlogged table A 
AS 
SELECT significant_digits(round(SUM(value * avgweight)/SUM(avgweight)), 2) AS avgvalue, 
       significant_digits(sum(value),2) AS sumvalue, 
       R_state AS F_state, 
       NULL AS F_year, 
       R_county AS F_county, 
       R_candidate AS F_candidate 
FROM R0 
WHERE TRUE 
  AND R_candidate IS NOT NULL 
  AND R_county IS NOT NULL 
  AND R_state IS NOT NULL 
GROUP BY R_candidate, R_county, R_state 
UNION ALL 
SELECT significant_digits(round(SUM(value * avgweight)/SUM(avgweight)), 2) AS avgvalue, 
       significant_digits(sum(value),2) AS sumvalue, 
       NULL AS F_state, 
       NULL AS F_year, 
       NULL AS F_county, 
       R_candidate AS F_candidate 
FROM R0 
WHERE TRUE 
  AND R_candidate IS NOT NULL 
GROUP BY R_candidate

我希望能够从此查询中提取每个 SELECT 语句。我编写了一个基本的正则表达式来获取 SELECT 和 UNION 之间的文本,但我正在努力解决如何获取 SELECT 和查询结尾之间的文本。

"SELECT(.*?)UNION"

非常感谢任何帮助,在此先感谢!

【问题讨论】:

  • 我怀疑它有一个正则表达式。如果您有嵌套选择,例如派生表或公用表表达式或标量子查询,该怎么办?
  • 我同意无法一概而论,但所有查询的结构都完全相同

标签: sql regex


【解决方案1】:

(SELECT(.*?)UNION)|(SELECT.*)

这符合我的预期

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多