Home » SQL & PL/SQL » SQL & PL/SQL » Concatenating address fields (Oracle 10g)
Concatenating address fields [message #599705] |
Mon, 28 October 2013 05:54 |
|
sss111ind
Messages: 634 Registered: April 2012 Location: India
|
Senior Member |
|
|
HI All,
The pipe separator needs to appear only when values found in addr1 or addr2 or addr3.
WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
SELECT '' addr1,'' addr2,'' addr3 FROM dual)
select addr1||'|'||addr2||'|'||addr3 address from address;
Regards,
Nathan
[Updated on: Mon, 28 October 2013 05:55] Report message to a moderator
|
|
|
|
|
|
|
|
Re: Concatenating address fields [message #599715 is a reply to message #599705] |
Mon, 28 October 2013 06:13 |
Lalit Kumar B
Messages: 3174 Registered: May 2013 Location: World Wide on the Web
|
Senior Member |
|
|
NVL2
SQL> WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
2 SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
3 SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
4 SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
5 SELECT '' addr1,'' addr2,'' addr3 FROM dual)
6 SELECT NVL2(ADDR1, ADDR1 || ' | ', ADDR1)||NVL2(ADDR2, ADDR2 || ' | ', ADDR2)||ADDR3 ADDRESS
7 FROM ADDRESS;
ADDRESS
--------------------------------------------------------------------------------
Silver Arc Plaza, | 4th Floor, 20/1, New Palasia | Indore
Shop No. 1,Vishnu Priya Building, | pune
D/7, Siddhivinayak Nagari, | Nr. Majura Gate, Ghod dod Road, |
B 4, Gold Coin Complex, | Ahmedabad
|
|
|
|
Re: Concatenating address fields [message #599717 is a reply to message #599715] |
Mon, 28 October 2013 06:18 |
cookiemonster
Messages: 13920 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
Lalit Kumar B wrote on Mon, 28 October 2013 11:13NVL2
Almost, you've got a trailing | on one line. An rtrim will fix it:
WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
SELECT '' addr1,'' addr2,'' addr3 FROM dual)
SELECT rtrim((NVL2(ADDR1, ADDR1 || '|', ADDR1)||NVL2(ADDR2, ADDR2 || '|', ADDR2)||ADDR3), '|') ADDRESS
from address;
|
|
|
|
|
Re: Concatenating address fields [message #599737 is a reply to message #599717] |
Mon, 28 October 2013 07:39 |
cookiemonster
Messages: 13920 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
case or decode would look more complex, ltrim, rtrim and replace is about the same as yours:
WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
SELECT '' addr1,'' addr2,'' addr3 FROM dual)
select replace(rtrim(ltrim(addr1||'|'||addr2||'|'||addr3, '|'), '|'), '|') address from address;
|
|
|
|
Re: Concatenating address fields [message #599815 is a reply to message #599814] |
Tue, 29 October 2013 04:17 |
cookiemonster
Messages: 13920 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
That was a mistake in my sql, should have been:
WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
SELECT '' addr1,'' addr2,'' addr3 FROM dual)
select replace(rtrim(ltrim(addr1||'|'||addr2||'|'||addr3, '|'), '|'), '||') address from address;
two || for the replace.
|
|
|
|
Re: Concatenating address fields [message #599818 is a reply to message #599817] |
Tue, 29 October 2013 04:33 |
Lalit Kumar B
Messages: 3174 Registered: May 2013 Location: World Wide on the Web
|
Senior Member |
|
|
sss111ind wrote on Tue, 29 October 2013 14:57But still it is not matching in this case
This should work perfrctly for you :
SQL> WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
2 SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
3 SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
4 SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
5 SELECT '' addr1,'' addr2,'' addr3 FROM dual)
6 SELECT RTRIM((NVL2(ADDR1, ADDR1 || '|', ADDR1) ||
7 NVL2(ADDR2, ADDR2 || '|', ADDR2) || ADDR3),
8 '|') ADDRESS
9 FROM ADDRESS;
ADDRESS
-----------------------------------------------------------------------------
Silver Arc Plaza,|4th Floor, 20/1, New Palasia|Indore
Shop No. 1,Vishnu Priya Building,|pune
D/7, Siddhivinayak Nagari,|Nr. Majura Gate, Ghod dod Road,
B 4, Gold Coin Complex,|Ahmedabad
Regards,
Lalit
|
|
|
Re: Concatenating address fields [message #599819 is a reply to message #599818] |
Tue, 29 October 2013 04:45 |
cookiemonster
Messages: 13920 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
Or even (getting it right this time):
SQL> WITH address AS (SELECT 'Silver Arc Plaza,' addr1,'4th Floor, 20/1, New Palasia' addr2,'Indore' addr3 FROM dual UNION ALL
2 SELECT 'Shop No. 1,Vishnu Priya Building,' addr1,'' addr2,'pune' addr3 FROM dual UNION ALL
3 SELECT 'D/7, Siddhivinayak Nagari,' addr1,'Nr. Majura Gate, Ghod dod Road,' addr2,'' addr3 FROM dual UNION ALL
4 SELECT '' addr1,'B 4, Gold Coin Complex,' addr2,'Ahmedabad' addr3 FROM dual UNION ALL
5 SELECT '' addr1,'' addr2,'' addr3 FROM dual)
6 select replace(rtrim(ltrim(addr1||'|'||addr2||'|'||addr3, '|'), '|'), '||', '|') address from address;
ADDRESS
-----------------------------------------------------------------------------
Silver Arc Plaza,|4th Floor, 20/1, New Palasia|Indore
Shop No. 1,Vishnu Priya Building,|pune
D/7, Siddhivinayak Nagari,|Nr. Majura Gate, Ghod dod Road,
B 4, Gold Coin Complex,|Ahmedabad
SQL>
Of course you could have tried working that out for yourself, replace isn't exactly complicated.
|
|
|
|
Goto Forum:
Current Time: Tue Apr 23 02:51:04 CDT 2024
|