UNLOAD wartości pustej bez znaku / w pliku wynikowym w Informix SQL
Z jednego z poprzednich artykułów: UNLOAD TO czyli jak wyładować/eksportować dane z bazy danych Informix SQL do pliku dowiedzieliśmy się w jaki sposób możemy wyeksportować wynik dowolnego zapytania SQL do pliku. Teraz chciałbym zaprezentować w jaki sposób można stworzyć zapytanie, tak aby w przypadku eksportu tzw. pustej wartości w pliku wynikowym nie zapisywał się w jej miejscu znak: /
. Spójrzmy na poniższą tabelę pracownicy
oraz przykład:
unload to 'pracownicy.csv' delimiter ';' select name, surname, phone from pracownicy;
W wyniku powyższego zapytania SQL zostanie wygenerowany plik: pracownicy.csv
rozdzielany średnikami o następującej zawartości:
John;True;500 100 200
David;False;600 123 456
Joseph;New;700 300 300
Zmodyfikujmy nieco przykład. Chcemy aby między każdą wartością pojawiło się puste pole, dodajmy zatem dwa znaki cudzysłowia: ""
unload to 'pracownicy.csv' delimiter ';' select name, "", surname, "" phone from pracownicy;
Teraz nasz wynikowy plik wyglądać będzie następująco:
John; \;True; \;500 100 200
David; \;False; \;600 123 456
Joseph; \;New; \;700 300 300
W pliku zostało dodane dodatkowe pole. Niestety nie jest ono puste, gdyż zawiera znak: “ \
” – spacja i ukośnik. Jak zatem zrobić aby wartość ta była pusta? Skorzystać z nvl
. Spójrzmy na kolejny przykład:
unload to 'pracownicy.csv' delimiter ';' select name, nvl(null,null), surname, nvl(null,null) phone from pracownicy;
Osiągneliśmy zamierzony wynik:
John;;True;;500 100 200
David;;False;;600 123 456
Joseph;;New;;700 300 300
Wstawiliśmy w pliku wynikowym dodatkowe puste pole pomiędzy imię i nazwisko oraz nazwisko i numer telefonu. Wykorzystaliśmy funkcję nvl
, która w przypadku wystąpienia wartości null
w pierwszym argumencie zwraca wartość z drugiego argumentu. Jako, że zarówno w pierwszym i drugim argumencie podaliśmy null
funkcja również zwróciła wartość: null
. Co ciekawe zastosowanie zapytania jak poniżej:
unload to 'pracownicy.csv' delimiter ';' select name, null, surname, null phone from pracownicy;
da nam wynik taki sam jak w przypadku użycia “” – czyli wstawi “ \
” spację i ukośnik w pliku wynikowym.
Jedynym zatem znanym mi rozwiązaniem jest zastosowanie funkcji: nvl(null,null). Jeśli znasz inną metodę, chętnie ją poznam.