如果题目改为 一张商品价格表,一列为价格,请这个显示:如果价格为空,请显示“unkown”,其他的价格则显示“other” select decode(price,null,'unknown','other') from price_table这样写对么?
CASE WHEN 是标准的sql还是oracle自己有的?
case 语句是Oracle的,sql标准里没有。最好不要用case,一般用if…else完全可以代替。
SELECT (CASE price WHEN price > 10 AND price < 20 THEN '10-20' WHEN price IS NULL THEN 'unkown' ELSE 'other' END) price FROM price_table 那个case后如果加上price对不对呢?
如果用if else 这个语句怎么写呢?
SELECT (CASE price WHEN price > 10 AND price < 20 THEN '10-20' WHEN price IS NULL THEN 'unkown' ELSE 'other' END) price FROM price_table 那个case后如果加上price对不对呢?
select (case when price>10 and price <20 then '10-20' when price is null then 'unkown' other 'other' end)price from price_table
select nvl(decode(sign(price,10),1,decode(sign(price,20),-1,'10-20','other'),'other'),'unkown') from price_table
不好意思,写错了 select nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown') from tb_price; 这样就可以了,不过还是用case比较好些
不好意思这个没有实现=other select decode(nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown'),'10-20','10-20','unkown','unkown','other') from price套用的层次太多了,还是用case比较好
when price is null then 'unkown'
other 'other' end)price
from price_table
WHEN price > 10 AND price < 20 THEN
'10-20'
WHEN price IS NULL THEN
'unkown'
ELSE
'other'
END) price
FROM price_table
不过如果加上另一个oracle函数可以判定大小,那个函数名忘了
功能大概是如果是正数为1
如果是0为0
如果是负数为-1
这样也可以做
一张商品价格表,一列为价格,请这个显示:如果价格为空,请显示“unkown”,其他的价格则显示“other” select decode(price,null,'unknown','other') from price_table这样写对么?
SELECT (CASE price
WHEN price > 10 AND price < 20 THEN
'10-20'
WHEN price IS NULL THEN
'unkown'
ELSE
'other'
END) price
FROM price_table
那个case后如果加上price对不对呢?
WHEN price > 10 AND price < 20 THEN
'10-20'
WHEN price IS NULL THEN
'unkown'
ELSE
'other'
END) price
FROM price_table
那个case后如果加上price对不对呢?
when price is null then 'unkown'
other 'other' end)price
from price_table
select nvl(decode(sign(price,10),1,decode(sign(price,20),-1,'10-20','other'),'other'),'unkown') from price_table
不好意思,写错了
select nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown') from tb_price;
这样就可以了,不过还是用case比较好些
这样就可以了,不过还是用case比较好些如果price 为 9 还是等于price 没有变化 再用nvl判断是否等于null
实现的功能和case一样的
不好意思这个没有实现=other
select decode(nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown'),'10-20','10-20','unkown','unkown','other') from price套用的层次太多了,还是用case比较好