sql >> Databasteknik >  >> RDS >> Oracle

Skapa en utdatafil med fast bredd i platt format från en SQL-fråga

Du castar dina kolumnvärden till char(n) , som fyller kortare strängar och siffror (implicit konverterade till strängar) till n chars och trunkerar längre värden. (Detta är bättre än att använda varchar2(n) , vilket skulle fela med längre nummer och inte skulle göra någon skillnad för kortare strängar).

Du kommer dock att ha problem med nollvärden, eftersom cast(null as char(n)) - eller något annat - är fortfarande null, snarare än n utrymmen som du kan förvänta dig. Det kan vara ett problem för vilken som helst av dina kolumner, men särskilt för dina case-uttryck.

Om några kolumner kan vara null kan du använda nvl eller coalesce för att behandla dem som ett enda utrymme istället, så kommer rollbesättningen att fylla dem också:

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

Istället för att casta kan du också använda rpad() :

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

För kasusuttrycken kan du göra else satsen utvärderas till ett enstaka mellanslag istället för null, men du måste också tillämpa casten på det övergripande kasusuttrycket, inte ha det inom en when gren; så istället för detta:

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

du skulle göra:

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

eller om du föredrar:

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

Din klient kan ha högerutfyllt den övergripande strängen till samma längd ändå (SQL*Plus kommer att göra det om du har set trimout off , eller om spoolning set trimspool off; vilket kan vara vad BobC syftade på), men det hjälper inte riktigt om det du verkligen försöker skapa är fält med fast längd , vilket kumulativt skulle ge dig en post med fast längd också - och om du inte hade fält med fast längd skulle det ändå vara omöjligt att tolka datan.



  1. Hur man validerar en enda kryssruta med PHP &MySQL

  2. Linq till SQL - Det går inte att uppdatera

  3. Installerar PostgreSQL Extension till alla scheman

  4. Få åtkomst till mysql som körs på localhost från minikube