首先,我用是oracle8i的,现有如下几个问题:
1、可以用with as 吗,如果不支持,有什么可以替代的?
2、select .... substr() from .... where ....;去掉substr()可以执行
加上则不能执行,是不是oracle8i不支持还是语法有错,若不支持该如何对某一列取前六位数值(字符类型数据)
3、如有T1.sphm=T2.sphm 和 T2.spdm=T3.spdm 。则 select T1.*, T3.spmc from T1,T3 Where T1.sphm=T2.sphm and
T2.spdm=T3.spdm,这句SQL有问题吗?若有问题,正确的写法?
4、decode()支持吗,若不支持,可以用case when吗?
感谢各位高手不吝赐教!!!
1、可以用with as 吗,如果不支持,有什么可以替代的?
2、select .... substr() from .... where ....;去掉substr()可以执行
加上则不能执行,是不是oracle8i不支持还是语法有错,若不支持该如何对某一列取前六位数值(字符类型数据)
3、如有T1.sphm=T2.sphm 和 T2.spdm=T3.spdm 。则 select T1.*, T3.spmc from T1,T3 Where T1.sphm=T2.sphm and
T2.spdm=T3.spdm,这句SQL有问题吗?若有问题,正确的写法?
4、decode()支持吗,若不支持,可以用case when吗?
感谢各位高手不吝赐教!!!
2、substr函数8i不支持吗?这个不清楚,应该支持的,或许是你写错了它的用法。substr(col_name,1,6)
3、肯定你的错了撒,你SQL语句只是从T1,T3两个表查询的,哪里多出了T2表啊,要么直接查询select T1.*, T3.spmc from T1,T3 Where T1.sphm=T3.spdm;
4、case when 是标准SQL,肯定8i支持!
1、可以用with as 吗,如果不支持,有什么可以替代的?如果根据某表创建表,是支持的.2、select .... substr() from .... where ....;去掉substr()可以执行
加上则不能执行,是不是oracle8i不支持还是语法有错,若不支持该如何对某一列取前六位数值(字符类型数据)这个?substr()肯定支持.3、如有T1.sphm=T2.sphm 和 T2.spdm=T3.spdm 。则 select T1.*, T3.spmc from T1,T3 Where T1.sphm=T2.sphm and
T2.spdm=T3.spdm,这句SQL有问题吗?若有问题,正确的写法?from中没有t2表,则条件中不能使用.
更改为如下:
select T1.*, T3.spmc from T1,T2 , T3
Where T1.sphm=T2.sphm and T2.spdm=T3.spdm4、decode()支持吗,若不支持,可以用case when吗?case when 肯定支持,decode也支持.
--这个是8i下的
SQL> with tab as
SP2-0734: 未知的命令开头 "with tab a..." - 忽略了剩余的行。
--这个是10g下的
SQL> with tab as
2
所有8i不支持with tab as...,你可以创建表来代替二
--8i下的
--注意substr()里的参数,substr(ename,1,4) 从第一个字符开始取4个
--substr(ename,4) 从第4个字符开始取到最后的
SQL> select substr(ename,1,4),substr(ename,4) from emp where empno=7369;SUBSTR(E SUBSTR(ENAME,4
-------- --------------
SMIT TH
三
select T1.*, T3.spmc from T1,T3 Where T1.sphm=T2.sphm and
T2.spdm=T3.spdm
--你用到了T2表但是在from后面没有T2表,应该改为:
select T1.*, T3.spmc from T1,T2,T3
Where T1.sphm=T2.sphm and T2.spdm=T3.spdm四
--8i下的
1* select decode(comm,null,0,comm) from emp
SQL> /DECODE(COMM,NULL,0,COMM)
------------------------
0
300
500
0
1400
0
0
0
0
0
0DECODE(COMM,NULL,0,COMM)
------------------------
0
0
0已选择14行。
可以用临时表
2
可以用substr
3
--错的
--或者这样
select T1.*, T3.spmc from T1,T2,T3 Where T1.sphm=T3.sphm and T2.spdm=T3.spdm
4
可以用case when.... end
view_jhcj c
where (p.fhrq between '20090101'and'20090131')
and p.spmc=c.spmc
and p.spmc in ('西门子电冰箱','西门子洗衣机'......)这句无法执行,提示“无效的列名”,若去掉“substr(p.fhrq,1,6) 发货日期”,则可以执行,恳请高手赐教
你p.fhrq字段是date类型还是varchar2类型???如果是date类型substr就不行!直接to_char(p.fhrq,'yyyymm')
select p.spmc 商品名称,
p.spgg 商品规格,
p.xsdj 销售单价,
c.jhcj 进货厂家,
p.fhrq,--用这个试试会报错不?
p.xssl 销售数量,
p.xssl*p.xsdj 销售金额
from view_spxs p,
view_jhcj c
where (p.fhrq between '20090101'and'20090131')
and p.spmc=c.spmc
and p.spmc in ('西门子电冰箱','西门子洗衣机'......)
select p.spmc 商品名称,p.spgg 商品规格,p.xsdj 销售单价,c.jhcj 进货厂家,p.fhrq 发货日期,p.xssl 销售数量,p.xssl*p.xsdj 销售金额 from view_spxs p,
view_jhcj c
where (p.fhrq between '20090101'and'20090131')
and p.spmc=c.spmc
and p.spmc in ('西门子电冰箱','西门子洗衣机'......)
--实在不行就转了
select p.spmc 商品名称,p.spgg 商品规格,p.xsdj 销售单价,c.jhcj 进货厂家,
to_char(to_date(trim(p.fhrq),'yyyymmdd'),'yyyymm') 发货日期,p.xssl 销售数量,p.xssl*p.xsdj 销售金额 from view_spxs p,
view_jhcj c
where (p.fhrq between '20090101'and'20090131')
and p.spmc=c.spmc
and p.spmc in ('西门子电冰箱','西门子洗衣机'......)
你有13楼的方法试下
to_char(to_date(trim(p.fhrq),'yyyymmdd'),'yyyymm')
--substr在8i里可以用的啊
连接到:
Oracle8i Release 8.1.7.0.0 - Production
JServer Release 8.1.7.0.0 - ProductionSQL> select substr(ename,1,3) from emp;SUBSTR
------
SMI
ALL
WAR
JON
MAR
BLA