oracle查询日期的问题,谁能帮忙看一下。(100分)

  • 主题发起人 主题发起人 正牌初哥
  • 开始时间 开始时间

正牌初哥

Unregistered / Unconfirmed
GUEST, unregistred user!
我是个初学者。用的是SCOUNIX+ORACLE,客户机用bde代码是这样的:
sjy.query1.close;
sjy.query1.sql.Clear;
sjy.query1.sql.add('select cz,ch,cc,dzrq,xkrq,srsj,kxsj,xkrq,xkjbr,dzrq from chk ');
if sjy.query1.Prepared=false then sjy.query1.Prepare;
sjy.query1.close;
sjy.query1.Open;

label9.Caption:=formatdatetime('yy-mmm-dd',sjy.query1.fieldbyname('dzrq').AsDateTime);
sjy.query2.close;
sjy.query2.sql.Clear;
sjy.query2.sql.add('select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=:dzrq');
sjy.Query2.ParamByName('ch').AsString:=sjy.Query1.fieldbyname('ch').AsString;
sjy.Query2.ParamByName('dzrq').AsString:=formatdatetime('yy-mmm-dd',sjy.query1.fieldbyname('dzrq').AsDateTime);
if sjy.query2.Prepared=false then sjy.query2.Prepare;
sjy.query2.close;
sjy.query2.Open;

出现错误ORA-01843 not a Valid month
label9.Caption是02-七月-15
改成formatdatetime('yy-mm-dd',sjy.query1.fieldbyname('dzrq').AsDateTime);也一样。
到底是什么问题,请各位指教一下小弟
 
:=formatdatetime('yy-mmm-dd',sjy.query1.fieldbyname('dzrq').AsDateTime);

老大,'yy-mmm-dd',多了一个m
 
to sun2003 老大没看清问题
oracle可能需要02-JUL-15的格式,怎样才可以实现。
formatdatetime('yy-mm-dd',sjy.query1.fieldbyname('dzrq').AsDateTime)会出现02-07-15
 
难道没有其他人可以回答吗?应该很简单的
 
sjy.Query2.ParamByName('dzrq').assign(sjy.query1.fieldbyname('dzrq'))
 
在ORACLE日期格式与SQLSERVER不同。以下是在SQLPLUS中。
(1)SQL> select sysdate from dual;
SYSDATE
----------
15-7月 -02
用TO_CHAR函数。
SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
TO_CHAR(SY
----------
2002-07-15 //在程序中可用TO_CHAR。也以用TO_DATE.
(2)还可以改ORACLE的环境中的日期格式:
在ORACLE/ADMIN/YX/PFILE/的init.ora中加入一句:
NLS_DATE_FORMAT = "YY-MM-DD" //重起数据库
(3)控制面板 的 区域设置 日期
里把日期样式换为 yy-mm-dd
能说的都说了,试试 ^_^
 
同楼上,用TO_CHAR函数
 
to_char是oracle的函数,在sqlplus当然没问题。
可是Delphi怎么实现啊?
 
sjy.query1.sql.add('select cz,ch,cc,to_char(dzrq,'yyyy-mm-dd') as dzrq,xkrq,srsj,kxsj,xkrq,xkjbr,dzrq from chk ');
 
用to_char 或to_date
 
select cz,ch,cc,dzrq,xkrq,srsj,kxsj,xkrq,xkjbr,tochar(dzrq,'yy-mm-dd') from chk
select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=todate(:dzrq,'yy-mm-dd')
 
to 正牌初哥:
同意:IT书生所述。
to_char是SQLPLUS的, 在DELPHI 中,你可以通过select 语句实现。
select to_char() from tablename
caption :=format();
 
ORA-00907 missing right parenthesis
 
》》ORA-00907 missing right parenthesis

你好象少打了个括号
 
to 各位大哥
sjy.query2.sql.add('select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=to_date(:dzrq,''yyyy-mm-dd'')');
sjy.Query2.ParamByName('ch').AsString:=sjy.Query1.fieldbyname('ch').AsString;
sjy.Query2.ParamByName('dzrq').AsString:=sjy.query1.fieldbyname('dzrq').Asstring;

ORA-01830:date format picture ends before converting entire input string
 
'select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=to_date(:dzrq,''yyyy-mm-dd'')'
有问题
保险点,这样
'select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=to_date(:dzrq,'+''''+'yyyy-mm-dd'+''''+')'
 
好象应该是这样
sjy.query2.sql.add('select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=to_date("1991-11-11",''yyyy-mm-dd'')');

可以改成
sjy.query2.sql.add('select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=to_date(label9.Caption,''yy-mm-dd'')');

 
谢谢各位指导。通过编译,代码如下:
sjy.query2.sql.add('select ch,dzrq,xcp,hwjs,xcd from czchk where ch=:ch and dzrq=to_date(:dzrq,''yyyy-mm-dd'')');
sjy.Query2.ParamByName('ch').AsString:=sjy.Query1.fieldbyname('ch').AsString;
sjy.Query2.ParamByName('dzrq').AsString:=formatdatetime('yyyy-mm-dd',sjy.query1.fieldbyname('dzrq').Asdatetime);
 
多人接受答案了。
 
后退
顶部