Cara alternatif apabila data nama tidak semuanya mengandung 3 kata....
Dengan menggunakan fungsi berikut anda dapat menentukan posisi string ke berapa
dalam kalimat yang akan anda ambil.
Contoh:
select getwordnum('Muhammad Akbar Asefi Putra Armansyah',2,' ') as hasil from
dual;
HASIL
--------------------------------------------------------------------------------
Akbar
select getwordnum('Muhammad Akbar Asefi Putra Armansyah',3,' ') as hasil from
dual;
HASIL
--------------------------------------------------------------------------------
Asefi
Berikut contoh lengkap untuk kasus anda....
create table t0 (nama varchar2(50));
create table t1 (nama_depan varchar2(20), nama_tengah varchar2(15),
nama_belakang varchar2(15));
insert into t0 values ('Indra Armansyah');
insert into t0 values ('Nunung Hastina Hutami');
insert into t0 values ('Muhammad Akbar Asefi Putra Armansyah');
create or replace function GETWORDNUM
(cString nvarchar2, nIndex smallint, cDelimiters nvarchar2 default nchr(32) ||
nchr(9) || nchr(10) || nchr(13) )
return nvarchar2
deterministic
as
i smallint := 1;
k smallint := 1;
l smallint := 0;
j smallint;
lmin smallint;
nEndString smallint := 1 + length(cString);
LenDelimiters smallint;
cWord nvarchar2(4000) := '';
begin
if cString is not null then
if cDelimiters is not null then
LenDelimiters := length(cDelimiters);
<<search>> while i <= nIndex loop
while instr(cDelimiters, substr(cString, k, 1)) > 0 and
nEndString > k loop
k := k + 1;
end loop;
exit when k >= nEndString;
j := 1;
lmin := nEndString;
while j <= LenDelimiters loop
l := instr(cString, substr(cDelimiters, j, 1), k);
j := j + 1;
if l > 0 and lmin > l then
lmin := l;
end if;
end loop;
if i = nIndex then
cWord := substr(cString, k, lmin - k);
exit;
end if;
k := lmin + 1;
exit when k >= nEndString;
i := i + 1;
end loop search;
else
if nIndex = 1 then
cWord := cString;
end if;
end if;
end if;
return cWord;
end GETWORDNUM;
/
select * from t0;
NAMA
--------------------------------------------------
Indra Armansyah
Nunung Hastina Hutami
Muhammad Akbar Asefi Putra Armansyah
insert into t1 select getwordnum(nama,1,' '), getwordnum(nama,2,' '),
getwordnum(nama,3,' ') from t0;
select * from t1;
NAMA_DEPAN NAMA_TENGAH NAMA_BELAKANG
-------------------- --------------- ---------------
Indra Armansyah
Nunung Hastina Hutami
Muhammad Akbar Asefi
Semoga membantu.
Salam,
Indra Armansyah
[EMAIL PROTECTED]
----- Original Message -----
From: Imam Nursianto
To: [email protected]
Sent: Thursday, February 22, 2007 9:14 AM
Subject: [indo-oracle] memisahkan isi tabel
mohon pencerahan dunk,
Saya punya table yang ada kolom nama, kemudian
isi kolom nama tersebut ingin saya pecah dalam 3 column di table yang
berbeda gimana caranya yaa....
misalnya :
table :
A
B
column :
nama
----> nama_depan, nama_tengah, nama_belakang
agus nur rahman
--->
agus
,
nur
, rahman
Terima Kasih,
Imam Nursianto
------------------------------------------------------------------------------
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.0.412 / Virus Database: 268.18.3/694 - Release Date: 2/20/2007
[Non-text portions of this message have been removed]