读书人

求:对SQL语句的拆分函数,该如何处理

发布时间: 2012-03-14 12:01:12 作者: rapoo

求:对SQL语句的拆分函数

select * from A
得到:select部分、字段部分、from部分和where部分。
如果是复杂的如:select * from a left join (select bb from b where a.aa= 'a ') on a.aa=b.bb
怎么获取from 部分呀,应该是:a left join (select bb from b where a.aa= 'a ') on a.aa=b.bb

不知道怎么实现?

急。

[解决办法]
字符串分析?用Copy 和 Pos 这两个函数可以吗?

query1.SQL.Text := 'select * from a left join (select bb from b where a.aa= ' 'a ' ') on a.aa=b.bb ';


var
S, S2 : string;
begin
S := LowerCase(Query1.SQL.Text);
S2 := Copy(S, Pos( 'from ',S)+5, MaxInt);
ShowMessage(S2);
end;
[解决办法]
做成通用的,符合所有要求的肯定过于麻烦,也未必有必要;
说一下你的具体需求好了;
譬如,你分解完后是要做什么用的?
[解决办法]
对。

在写入SQL语句时可以分行写,这样,就便于把各部分取出来了。

with Query1.SQL do
begin
Clear;
Add( 'select * ');
Add( 'from table ');
Add( 'where 1=1 ');
Add( 'order by ID desc ');
end;


有取出某部分的需要时:(下面是取出每一部分)

procedure TForm1.Button1Click(Sender: TObject);
var
I : integer;
begin
for I := 0 to Query1.SQL.Count-1 do
ShowMessage(Query1.SQL[I]);
end;
[解决办法]
重新组合?是这个意思吗:

function SQLStr(const SelectStr, FromStr, WhereStr : string): string;
begin
Result := Format( 'select %s from %s where %s ',[SelectStr, FromStr, WhereStr]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S : string;
begin
S := SQLStr( '* ', 'table ', '1=1 ');
ShowMessage(S);
end;
[解决办法]
自己编写Parser,需要编写一个栈结构当遇到join的时候压栈,join结束则弹栈。这样可以嵌套join。
[解决办法]
个人觉得构造SQL字符串。就可以使用+操作符,直接加不就好了。。。

[解决办法]
赞成lihuasoft(一九七五)(::我业余,所说仅供参考)兄写的

读书人网 >.NET

热点推荐