Home » Developer & Programmer » Forms » nested decode
nested decode [message #255525] |
Wed, 01 August 2007 02:11 |
sispk6
Messages: 164 Registered: November 2006 Location: pakistan
|
Senior Member |
|
|
it is working well for ist 2 cases but gives unexpected result for last 4 why
------------------------------
select decode( substr('&&a' , 1,1) ,'.','no' , 'yes' ,
substr('&a' , 1,1) ,'@','no' , 'yes' ,
substr('&a' , -1,1) ,'.','no' , 'yes' ,
substr('&a' , -1,1) ,'@','no' , 'yes' ,
instr( '&a' , '@' ) , 0 , 'no' , 'yes6' ,
instr ( '&a' , '.' ) ,0 , 'no' , 'yes7'
) as "valid"
from dual
----------------------
|
|
|
Re: nested decode [message #255550 is a reply to message #255525] |
Wed, 01 August 2007 03:25 |
|
Littlefoot
Messages: 21823 Registered: June 2005 Location: Croatia, Europe
|
Senior Member Account Moderator |
|
|
It is because you don't understand how DECODE works. All the testing you are trying to do can be done using DECODE, but it would be a mess. I'd suggest you to use CASE instead (both can be found in the documentation; check the link in the Sticky topic in the Newbies Forum).
However, if you check existence of '@' in a string using the INSTR function, why are you testing it using the SUBSTR function as well? I'd say that INSTR should be enough.
Here's an example; see if it can help.
WITH t AS
(SELECT 'this@_is_invalid_case' COL FROM dual
UNION
SELECT 'this is valid case' COL FROM dual
)
SELECT COL,
CASE
WHEN SUBSTR(COL, 1, 1) IN ('.', '@') THEN 'no'
WHEN SUBSTR(COL, -1, 1) IN ('.', '@') THEN 'no'
ELSE 'yes'
END case_substr,
CASE
WHEN INSTR(COL, '@') > 0 THEN 'no'
WHEN INSTR(COL, '.') > 0 THEN 'no'
ELSE 'yes'
END case_instr
FROM t;
COL CASE_SUBST CASE_INSTR
--------------------- ---------- ----------
this is valid case yes yes
this@_is_invalid_case yes no
|
|
|
thanx [message #255564 is a reply to message #255550] |
Wed, 01 August 2007 04:05 |
sispk6
Messages: 164 Registered: November 2006 Location: pakistan
|
Senior Member |
|
|
thanx for your help man
actually i was trying to do this
=============================================
select decode(
substr('&&a' , 1,1) ,'.','no' ,
decode(substr('&a' , 1,1) ,'@','no' ,
decode(substr('&a' , -1,1),'.','no',
decode(substr('&a' , -1,1) ,'@','no' ,
decode(instr( '&a' , '@' ) , 0 , 'no' ,
decode(instr( '&a' , '.' ) ,0 , 'no' , 'yes' ))))))
as "valid"
from dual
========================
its working alright
|
|
|
regards [message #255568 is a reply to message #255564] |
Wed, 01 August 2007 04:09 |
sispk6
Messages: 164 Registered: November 2006 Location: pakistan
|
Senior Member |
|
|
actually my requirement was to do it in decode
but no doubt your approach is much better and far simpler than mine.
|
|
|
Goto Forum:
Current Time: Thu Dec 05 06:53:30 CST 2024
|