关于ORACLE的SQL问题。。。(100分)

  • 主题发起人 主题发起人 fpsky
  • 开始时间 开始时间
F

fpsky

Unregistered / Unconfirmed
GUEST, unregistred user!
SqlStr:='SELECT * FROM WEB_QHB_TEMPZKGZ WHERE ORDER BY TO_DATE(RQ,''YYYY-M-D'')';
ClientDataSetA.Close;
ClientDataSetA.CommandText := SqlStr;
ClientDataSetA.Open;

报错:Invalid use of keyword token:(RQ,'YYYY-M-D')
请问怎样解决,其中RQ是一个字符串日期,想用它来排个序...
 
首先去掉where,where错。order by 就直接用字符串排序
SqlStr:=
SELECT * FROM WEB_QHB_TEMPZKGZ ORDER BY RQ;
 
去掉了,我发给大富翁的时候删了一些条件怕大家年不清,结果忘记删除where

不能用直接排,比如:
想按日期从小到大排:2002-7-9、2002-7-11号
结果2002-7-11会排在2002-7-9号之前。。。
 
SqlStr:='SELECT * FROM WEB_QHB_TEMPZKGZ WHERE ORDER BY TO_DATE(RQ,''yyyy-mm-dd'')';
 
agree with zqs10597249;
没必要将字符串日期转换为日期型。直接排序。
 
xwchen0、pcc_mmz1zqs10597249:
谢谢了,问题还没有解决
 
去掉了,我发给大富翁的时候删了一些条件怕大家年不清,结果忘记删除where

不能用直接排,比如:
想按日期从小到大排:2002-7-9、2002-7-11号
结果2002-7-11会排在2002-7-9号之前。。。

既然这样你降序排序(在最后加上"DESC")不就行了!!!!!还有你也可以把你那个字段
改成日期型的,再按这个日期型字段排序,我想一定可以的
 
如果你不进行日期的排序,可以
SELECT * FROM WEB_QHB_TEMPZKGZ
ORDER BY to_char(TO_date(RQ,'yyyy-mm-dd'),'yyyy-mm-dd');
 
SqlStr:='SELECT * FROM WEB_QHB_TEMPZKGZ ORDER BY RQ;
ClientDataSetA.Close;
ClientDataSetA.CommandText := SqlStr;
ClientDataSetA.Open;
上述写法是正确的,至于你说的结果2002-7-11会排在2002-7-9号之前是由于RQ你定义为字
符的结果,建议你把RQ定义为日期型不要用字符型,即使你能在order by中转化为日期也会
影响速度,是一种不标准的写法,将来做移植会出现问题,如果你一定要字符型那你存盘时
必须把诸如2002-7-9转化为2002-07-09的形式存盘,排序结果会正确
 
如果你不进行时间的排序,可以
SELECT * FROM WEB_QHB_TEMPZKGZ
ORDER BY to_char(TO_date(RQ,'yyyy-mm-dd'),'yyyy-mm-dd');
 
多人接受答案了。
 
后退
顶部