sql >> Databáze >  >> RDS >> Oracle

Vytvořte výstupní soubor s pevnou šířkou plochého formátu z dotazu SQL

Přenášíte hodnoty sloupců do char(n) , která vyplní kratší řetězce a čísla (implicitně převedená na řetězce) na n znaky a zkrátit delší hodnoty. (To je lepší než použití varchar2(n) , což by u delších čísel bylo chybné a nedělalo by to žádný rozdíl u kratších řetězců).

Budete mít problém s hodnotami null, protože cast(null as char(n)) - nebo cokoli jiného - je stále null, spíše než n prostory, jak byste mohli očekávat. To může být problém pro kterýkoli z vašich sloupců, ale zejména pro výrazy velkých a malých písmen.

Pokud některé sloupce mohou být null, můžete použít nvl nebo coalesce místo toho s nimi zacházet jako s jedním prostorem a obsazení je pak vyplní také:

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

Spíše než casting můžete také použít rpad() :

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

Pro výrazy typu case můžete použít else klauzule se vyhodnotí na jednu mezeru místo null, ale přetypování je také potřeba použít na celkový výraz případu, nikoli jej mít v rámci jednoho when větev; takže místo tohoto:

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

udělali byste:

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

nebo chcete-li:

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

Váš klient stejně mohl správně doplnit celkový řetězec na stejnou délku (SQL*Plus to udělá, pokud jste set trimout off , nebo při zařazování set trimspool off; což by mohlo být to, o čem BobC odkazoval), ale to opravdu nepomůže, pokud to, co se skutečně snažíte vytvořit, jsou pole s pevnou délkou , což by vám kumulativně dalo také záznam s pevnou délkou – a pokud byste neměli pole s pevnou délkou, bylo by stejně nemožné data interpretovat.



  1. Vytvořte úlohu SQL Server Agent pomocí T-SQL

  2. Proč zde MySQL vždy nepoužívá slučování indexů?

  3. Přidejte sloupec do existující tabulky v SQLite

  4. Jak používat tabulku čísel ve výpisu SELECT INTO