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:

pracownicy
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.