sqlstr := 'select a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc,sum(c.fsl) '+
'from zy.tzydoctororder a '+
'left join zy.tzynurseorder b '+
'on a.forderid = b.fadviceid '+
'left join ypgl.tzyfymx c '+
'on b.fid=c.fyzid '+
'left join hisbase.tdrugcode d '+
'on c.fypbh=d.fmcode '+
'where c.ffyrq >= to_date(:a1,‘yyyy-mm-dd’) ' +
'and c.ffyrq<= to_date(:a2,‘yyyy-mm-dd’) '+
'and c.fypbh in(:a3) '+
'group by a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc';
ADOQuery1.sql.Add(sqlstr); DateTimePicker1.Date:=now;
DateTimePicker2.Date:=now;
ADOQuery1.Parameters.ParamByName('a1').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('a2').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker2.Date);
ADOQuery1.Parameters.ParamByName('a3').Value := edit1.Text; ADOQuery1.Open;
请问这段oracle的sql语句怎么拼接,新手一只,调试了3天没有搞好。主要还是日期这个地方很要命!
'from zy.tzydoctororder a '+
'left join zy.tzynurseorder b '+
'on a.forderid = b.fadviceid '+
'left join ypgl.tzyfymx c '+
'on b.fid=c.fyzid '+
'left join hisbase.tdrugcode d '+
'on c.fypbh=d.fmcode '+
'where c.ffyrq >= to_date(:a1,‘yyyy-mm-dd’) ' +
'and c.ffyrq<= to_date(:a2,‘yyyy-mm-dd’) '+
'and c.fypbh in(:a3) '+
'group by a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc';
ADOQuery1.sql.Add(sqlstr); DateTimePicker1.Date:=now;
DateTimePicker2.Date:=now;
ADOQuery1.Parameters.ParamByName('a1').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('a2').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker2.Date);
ADOQuery1.Parameters.ParamByName('a3').Value := edit1.Text; ADOQuery1.Open;
请问这段oracle的sql语句怎么拼接,新手一只,调试了3天没有搞好。主要还是日期这个地方很要命!
试试这个,字符串里面的单引号要写成两个。
试试这个,字符串里面的单引号要写成两个。
调试一下,将SQL语句复制出来,在TOAD或其他程序中运行看看。
另外,确认一下是否如1楼说的,单引号是要英文的,不能是中文的。
sqlstr := 'select * from ( '+
'select a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc,sum(c.fsl) total ' +
'from zy.tzydoctororder a ' +
'left join zy.tzynurseorder b ' +
'on a.forderid = b.fadviceid ' +
'left join ypgl.tzyfymx c ' +
'on b.fid=c.fyzid ' +
'left join hisbase.tdrugcode d ' +
'on c.fypbh=d.fmcode ' +
'where c.ffyrq>=to_date(:a1,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.ffyrq<=to_date(:a2,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.fypbh in(:a3) ' +
'union all ' +
'select a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc,sum(c.fsl) total ' +
'from zy.tcydoctororder a ' +
'left join zy.tcynurseorder b ' +
'on a.forderid = b.fadviceid ' +
'left join ypgl.tzyfymx c ' +
'on b.fid=c.fyzid ' +
'left join hisbase.tdrugcode d ' +
'on c.fypbh=d.fmcode ' +
' where c.ffyrq>=to_date(:a1,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.ffyrq<=to_date(:a2,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.fypbh in(:a3) ' +
'union all ' +
'select p.fname,e.fypbh,e.fmc,e.fgg,g.fcj,g.fypjxmc,sum(e.fsl) total from ypgl.tmzfymx e left join hisbase.tdrugcode g ' +
'on e.fypbh=g.fmcode ' +
'left join hisbase.tperson p ' +
'on e.fysh=p.ftybh ' +
'where e.ffyrq>=to_date(:a1,'+quotedstr('yyyy-mm-dd')+') ' +
' and e.ffyrq<=to_date(:a2,'+quotedstr('yyyy-mm-dd')+') ' +
' and e.fypbh in(:a3) ' +
') aa '+
'order by aa.fypbh,aa.total desc ';ADOQuery1.sql.Add(sqlstr);
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text,true);
ADOQuery1.Parameters.ParamByName('a3').Value := edit1.Text;
ADOQuery1.Parameters.ParamByName('a1').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('a2').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker2.Date); ADOQuery1.ParamCheck := False; ADOQuery1.Open;上面的问题解决了,但是这个用了union all后就报参数未正确定义