Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Utwórz plik wyjściowy w formacie płaskim o stałej szerokości z zapytania SQL

Przesyłasz wartości kolumn do char(n) , który dopełni krótsze ciągi i liczby (domyślnie zamienione na ciągi) do n znaków i obcinaj dłuższe wartości. (Jest to lepsze niż użycie varchar2(n) , co powodowałoby błąd przy dłuższych liczbach i nie miałoby żadnego wpływu na krótsze łańcuchy).

Będziesz miał jednak problem z wartościami null, ponieważ cast(null as char(n)) - lub cokolwiek innego - nadal ma wartość null, a nie n przestrzenie, jak można się spodziewać. Może to stanowić problem w przypadku każdej z Twoich kolumn, ale szczególnie w przypadku wyrażeń wielkości liter.

Jeśli jakiekolwiek kolumny mogą być puste, możesz użyć nvl lub coalesce traktować je jako pojedynczą spację, a rzutowanie również je uzupełni:

cast(coalesce(First_name, ' ') as char(20))

Zamiast rzutowania możesz również użyć rpad() :

rpad(coalesce(First_name, ' '), 20, ' ')

W przypadku wyrażeń wielkości liter możesz utworzyć else Klauzula ocenia się na pojedynczą spację zamiast null, ale musisz również zastosować rzutowanie do ogólnego wyrażenia case, nie umieszczaj go w jednym when oddział; więc zamiast tego:

max(case when email_Rank = 1 then cast(email_address as char(100)) else null end)

byś zrobił:

cast(max(case when email_Rank = 1 then email_address else ' ' end) as char(100))

lub jeśli wolisz:

cast(coalesce(max(case when email_Rank = 1 then email_address end), ' ') as char(100))

Twój klient mógł i tak dopełniał cały ciąg znaków do tej samej długości (SQL*Plus zrobi to, jeśli set trimout off , lub jeśli buforowanie set trimspool off; co może być tym, o czym mówił BobC), ale to nie pomaga, jeśli tak naprawdę próbujesz stworzyć pola o stałej długości , co łącznie dałoby również rekord o stałej długości - a jeśli nie miałbyś pól o stałej długości, i tak nie byłoby możliwe zinterpretowanie danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień numer daty w Excelu na datę Oracle

  2. Łączenie programu w c++ z Oracle

  3. Problem z połączeniem wiosennym

  4. Jak uzyskać liczbę elementów w tablicy JSON przechowywanej jako CLOB w Oracle 12c?

  5. SQLPlus próbuje dwukrotnie usunąć pakiet