情况: 我有几个SSRS报告,我需要记录sql代码。 为此,我需要一次又一次地以完全相同的方式格式化代码。
问题: 在我的一些报告中,我有像
这样的结构select outer
from (
select outin
from (
select inner
from (
select innerMax
from
)z
where
)x
where dateadd(d,12,getdate())
)y
where
我希望结果是
select outer
from (
select outin
from (
select inner
from (
select innerMax
from
)z
where
)x
where dateadd(d,12,getdate())
)y
where
但我在缩进嵌套选择
方面遇到了问题如果你能给我提供例子,我真的很感激。 我使用了分裂,正则表达式,子串,......
问候
答案 0 :(得分:1)
这比你想象的要复杂:split,substring和regex不足以可靠地解决这个问题。考虑SQL代码中的注释或字符串文字,它们可能包含看起来像SQL的文本或包含会弄乱缩进级别的括号。
更好的方法是使用SQL解析器。这是一个python-sqlparse的演示:
#!/usr/bin/env python
import sqlparse
sql = """
select outer
from (
select outin
from (
select inner
from (
select innerMax
from
)z
where
)x
where dateadd(d,12,getdate())
)y
where
"""
print sqlparse.format(sql, reindent=True)
将打印:
select outer
from
(select outin
from
(select inner
from
(select innerMax
from)z
where)x
where dateadd(d,12,getdate()))y
where