Menghilangkan Non Numeric untuk Field Numeric

No Comments
Menyebalkan sekali nih project, masa' target dan realisasi yang seharusnya angka bisa diisi karakter, apa kata dunia?. yang pertama terpikir adalah mengecek data yang diisikan itu berjenis numeric atau bukan. Mulailah browsing-browsing, dan ketemu nih bentuk dari function untuk mengecek data tsb.

katakanlah kita buat satu function, bernama cek_numeric, ini nih codenya di oracle


CREATE FUNCTION CEK_NUMERIC(P_DATA IN VARCHAR2) RETURN VARCHAR2
    IS
        V_TIPE VARCHAR(11);
    BEGIN
        SELECT CASE WHEN REGEXP_LIKE(TRIM(P_DATA), '^-?[[:digit:],.]*$') 
         THEN 'NUMERIC' 
         ELSE 'NON-NUMERIC' END INTO V_TIPE
        FROM DUAL;
        
        IF V_TIPE = 'NUMERIC' THEN
            RETURN 'TRUE';
        ELSE
            RETURN 'FALSE';
        END IF;
        
END CEK_NUMERIC;

bagi Anda yang masih awam, saya terangkan deh, mumpung masih senang ngetik nih
CREATE FUNCTION CEK_NUMERIC(P_DATA IN VARCHAR2) RETURN VARCHAR2
 artinya adalah, kita akan membuat function dengan nama cek_numeric dengan data inputan bernama p_data bertipe varchar2, dan mengembalikan nilai / return bertipe varchar2 saat dieksekusi.
IS V_TIPE VARCHAR(11);
 adalah pendeklarasian variable dalam oracle, jika Anda memiliki lebih dari 1 variable, masukkan di sini semuanya ya.
begin dan end adalah awal dan akhir eksekusi kita.
SELECT CASE WHEN REGEXP_LIKE(TRIM(P_DATA)... dst
adalah mengecek p_data yang diinputkan, serta titik atau koma jika diketahui, akan menghasilkan 'NUMERIC', jika lainnya hasilkan 'NON-NUMERIC' dan simpan (INTO) ke variable V_TIPE.
IF V_TIPE = 'NUMERIC' THEN RETURN 'TRUE';... dst
jika v_tipe bernilai NUMERIC, maka kembalikan nilai TRUE. dst, jika ada pertanyaan masalah ini silakan kirim di comment saja ya..



Nah, selanjutnya adalah mengubah nilai yang bukan character kita hapus dan mengambil nilai number saja.

CREATE FUNCTION GANTI_NUMERIC(P_DATA IN VARCHAR2) RETURN NUMBER
    IS
        V_HASIL NUMBER;
    BEGIN
        
        IF CEK_NUMERIC(P_DATA) = 'TRUE' THEN
            V_HASIL := REPLACE(P_DATA, '.', ',');
        ELSE        
            SELECT REPLACE (TRANSLATE (P_DATA, TRANSLATE (P_DATA, '1234567890', ' '),'*'),'*') 
            INTO V_HASIL FROM DUAL;
        END IF;
        RETURN V_HASIL;
    END GANTI_NUMERIC;


nah, saya hanya akan menerangkan yang berwarna biru saja ya.
IF CEK_NUMERIC(P_DATA) = 'TRUE' THEN V_HASIL := REPLACE(P_DATA, '.', ',');
jika kita mengeksekusi function cek_numeric yang kita telah buat di atas bernilai 'TRUE' maka tidak perlu diproses, tapi simpan data di v_hasil yang nanti akan kita kembalikan karena khan data sudah dalam bentuk numeric.

SELECT REPLACE (TRANSLATE (P_DATA, TRANSLATE (P_DATA, '1234567890', ' '),'*'),'*') 
INTO V_HASIL FROM DUAL;
Nah, jika cek_numeric bernilai 'FALSE' maka kita ubah selain 12345...0 menjadi '' atau tanpa character. dan simpan hasilnya dalam v_hasil dan kita kembalikan.

Nah, akhirnya selesai juga. Terima kasih

Sumber : http://datawarehouse.ittoolbox.com/groups/technical-functional/informatica-l/how-can-we-remove-all-types-of-non-numeric-and-special-charecters-from-a-character-field-which-is-having-numaric-data-3473701
Next PostNewer Post Previous PostOlder Post Home

0 comments

Post a Comment