各位大侠帮个忙

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
SQL> select cashier_no,sum(substr(lpad(time,4),1,2)*60+substr(lpad(time,4),3,2)) mintus from invoice_time
where cashier2_no=112
group3 by cashier_no;
CASHIER_NO MINTUS
---------- ----------
112 9117
SQL> select cashier_no,sum(substr(lpad(time,4),1,2)*60+substr(lpad(time,4),3,2)) mintus from invoice_time
2group by cashier_no;
ERROR:
ORA-01722: invalid number

no rows selected
我想问一下,下面这条语句是那里错了??
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
好像是数据的问题,先把数据SELECET出来看看。



回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
非数字型数据当成数字型数据来操作或者非字符数据当成字符数据来操作。。。。。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
invoicd_date CASHIER_NO LK AMOUNTMINTIMEMAXTIME TIME
------------------ ---------- ---------- ---------- ---------- ---------- ----------
14-OCT-07
1192118703.44910 1500550
14-OCT-07
1201997742.22835 1429554
14-OCT-07
1232318328.82 1505 2141636
14-OCT-07
124 503806.41 1456 2112656
14-OCT-07
145260 10747.93 1501 2138637
14-OCT-07
1542197309.62910 2059 1149
(字段全部为束型)
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
字段属性全部为数值型
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
substr(lpad(time,4),1,2)*60+substr(lpad(time,4),3,2)这个也行?字符串怎么用‘+’,你最好先to_number吧
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
最初由 shenghuan96 发布
[B]substr(lpad(time,4),1,2)*60+substr(lpad(time,4),3,2)这个也行?字符串怎么用‘+’,你最好先to_number吧 [/B]

但是奇怪的是他加了条件就不会出错呀。。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
SYS.YUDONG>select sum(substr(lpad(5,4),1,2)*60+substr(lpad(55,4),3,2)) from dual;
select sum(substr(lpad(5,4),1,2)*60+substr(lpad(55,4),3,2)) from dual
*
ERROR at line 1:
ORA-01722: invalid number

SYS.YUDONG>select sum(substr(lpad(5,4),1,2)*60+substr(lpad(55,4),3,2)) from dual where 1=2;
SUM(SUBSTR(LPAD(5,4),1,2)*60+SUBSTR(LPAD(55,4),3,2))
----------------------------------------------------

1 row selected.
SYS.YUDONG>select sum(substr(lpad(5555,4),1,2)*60+substr(lpad(5555,4),3,2)) from dual;
SUM(SUBSTR(LPAD(5555,4),1,2)*60+SUBSTR(LPAD(5555,4),3,2))
---------------------------------------------------------

3355
1 row selected.

如果执行了LPAD ,ORACLE给做了隐式数据类型转换,数字类型为何还要用LPAD去处理格式?如果非要处理TO_NUMBER处理一下。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
隐式数据转换,语句没什么问题。
关键是数据问题。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
LPAD汉书使用也有问题
SYS.YUDONG>select lpad(15,4) from dual;
LPAD
----
15
1 row selected.

默认补充空格或者空串。
SYS.YUDONG>SELECT LENGTH(lpad(15,4)) FROM DUAL;
LENGTH(LPAD(15,4))
------------------

4
1 row selected.

标准格式:
LPAD(XXXXX,10,'YYYY')

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行