sql >> Database teknologi >  >> RDS >> Oracle

Fremstil en outputfil i fladt format med fast bredde fra en SQL-forespørgsel

Du caster dine kolonneværdier til char(n) , som udfylder kortere strenge og tal (implicit konverteret til strenge) til n tegn og afkorte længere værdier. (Dette er bedre end at bruge varchar2(n) , hvilket ville fejle med længere tal og ikke ville gøre nogen forskel for kortere strenge).

Du vil dog have et problem med nuller, da cast(null as char(n)) - eller noget andet - er stadig null i stedet for n rum, som du kunne forvente. Det kan være et problem for enhver af dine kolonner, men især for dine kasusudtryk.

Hvis nogen kolonner kan være nul, kan du bruge nvl eller coalesce at behandle dem som et enkelt rum i stedet, og rollebesætningen vil så også polstre dem:

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

I stedet for at caste, kan du også bruge rpad() :

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

For kasusudtrykkene kan du lave else klausul evalueres til et enkelt mellemrum i stedet for null, men du skal også anvende castet til det overordnede kasusudtryk, ikke have det inden for en when afdeling; så i stedet for dette:

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

du ville gøre:

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

eller hvis du foretrækker det:

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

Din klient har muligvis højrepoleret den overordnede streng til samme længde alligevel (SQL*Plus vil gøre det, hvis du har set trimout off , eller hvis spooling set trimspool off; hvilket måske var det, BobC refererede til), men det hjælper ikke rigtigt, hvis det, du virkelig forsøger at oprette, er felter med fast længde. , hvilket kumulativt også ville give dig en post med fast længde - og hvis du ikke havde felter med fast længde, ville det alligevel være umuligt at fortolke dataene.



  1. Liste over bedste praksis MySQL-datatyper

  2. SQL Server 2005 og midlertidig tabelomfang

  3. Hvordan kan jeg ændre præfikser i alle tabeller i min MySQL DB?

  4. PostgreSQL Connection Pooling med PgBouncer