解析sql中的表名

Posted jt_Huang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析sql中的表名相关的知识,希望对你有一定的参考价值。

最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析

初步思路:

1.转义字符:去除两个引号连在一起的

2.字符串: 去除所有被引号包裹的

3.括号:识别括号处理

4.关键字: 用关键字切割语句,去除与表名 无关的

5.解析与表名有关的切割分段得表名

 

先是粗暴的括号处理

def get_str(s):
you = 0
st = []
re = ‘‘
max_you = 0
for ii in s:
st.append(ii)
while st:
tmp = st.pop()
re = tmp + re
if tmp == ‘)‘:
you += 1
if max_you < you:
max_you = you
elif tmp == ‘(‘:
you -= 1
if you == 0:
return [re, max_you]
return [s, max_you]


s = "(1,2,(a,b),3,4,(a,b,(0,c,s,1000),(1,a,1200),(2,1400),(3,1600),(4,1800),n,m),((sd,df),(sw,gt))t,b)"

array = []
array_level = []

for ch in range(len(s)):
if s[ch] == ‘)‘:
next_str = get_str(s[:ch+1])
while len(array_level) < next_str[1]:
array_level.append([])
array.append(next_str[0])
array_level[next_str[1]-1].append(next_str[0])


print array
print ‘-‘ * 60
for i in array_level:
print i

以上是关于解析sql中的表名的主要内容,如果未能解决你的问题,请参考以下文章

Oracle初级优化sql

如何优化SQL语句

为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?

SQL性能优化

SQL优化法则小记

Oracle SQL语句性能优化方法大全