我尝试将以下SQL语句拆分为几列:
select
count(rtnotes.keyno) as value,
ent.company as label,
'j-ChartDrillDown-406,'+CAST(ENT.ENTID AS CHAR(10)) AS link,
dateadd(week, datediff(wk, 0, dateadd(wk,-5,getdate())), -1) as test
...
我希望将其拆分为select语句中的4列:
count(rtnotes.keyno) as value
ent.company as label
'j-ChartDrillDown-406,'+CAST(ENT.ENTID AS CHAR(10)) AS link
dateadd(week, datediff(wk, 0, dateadd(wk,-5,getdate())), -1) as test
我已经可以使用引号将引号内的逗号分隔开:
,(?=(?:[^']*'[^']*')*[^']*$)
但我还需要忽略括号内的逗号(在这种情况下,由于dateadd和datediff导致嵌套括号)
答案 0 :(得分:0)
(评论太久了)
除非您知道要解析的每个查询的嵌套括号的确切数量,否则您将无法。基本上是因为它与parsing HTML using Regular Expressions相同。
原因是这种情况下的括号类似于HTML的打开和关闭标签。此外,您必须确保处理SELECT ':)' AS Smiley
或CAST(')' AS NCHAR(1))
之类的情况,这些情况的括号中可能包含字符串值,这会给您带来很多麻烦。
但是,像SQL Parser这样的项目可能会帮助您实现所需的目标。
答案 1 :(得分:0)
这是您需要的正则表达式。
正则表达式:'[^ select] [^ \ s]。+ [()]?[^,| \ s]'
例如,关于您的数据,请点击链接。 https://regex101.com/r/Zhk1JP/2