Dot-Net

在查詢中查找所有表名的正則表達式

  • February 2, 2019

我對正則表達式並不那麼熱情,它讓我的小腦袋融化了一些東西。

我正在嘗試在查詢中查找所有表名。所以說我有查詢:

SELECT one, two, three FROM table1, table2 WHERE X=Y

我想拉出“table1,table2”或“table1”和“table2”

但是如果沒有 where 語句怎麼辦。它可能是文件的結尾,或者可能有 group by 或 order by 等。我知道“大多數”時間這不是問題,但我不喜歡為“大多數”編碼的想法情況並知道我留下了一個可能導致以後出現問題的漏洞。

這是一個可行的正則表達式嗎?我是正則表達式的普通人嗎?

(PS 這將在 C# 中完成,但假設這並不重要)。

我發現這個網站有一個很棒的解析器!

http://www.sqlparser.com/

很值得。工作一種享受。

一種解決方法是對錶和視圖實施命名約定。然後可以對命名前綴解析 SQL 語句。

例如:

SELECT tbltable1.one, tbltable1.two, tbltable2.three
FROM tbltable1
   INNER JOIN  tbltable2
       ON tbltable1.one = tbltable2.three

將空格拆分為數組:

("SELECT","tbltable1.one,","tbltable1.two,","tbltable2.three","FROM","tbltable1","INNER","JOIN","tbltable2","ON","tbltable1.one","=","tbltable2.three")

將元素左側移到句點:

("SELECT","tbltable1","tbltable1","tbltable2","FROM","tbltable1","INNER","JOIN","tbltable2","ON","tbltable1","=","tbltable2")

刪除帶有符號的元素:

("SELECT","tbltable1","tbltable1","tbltable2","FROM","tbltable1","INNER","JOIN","tbltable2","ON","tbltable1","tbltable2")

簡化為唯一值:

("SELECT","tbltable1","tbltable2","FROM","INNER","JOIN","ON")

過濾左 3 個字元 ="tbl"

("tbltable1","tbltable2")

引用自:https://stackoverflow.com/questions/281041