Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menghasilkan file output format datar lebar tetap dari kueri SQL

Anda memasukkan nilai kolom Anda ke char(n) , yang akan menambahkan string dan angka yang lebih pendek (secara implisit dikonversi ke string) ke n karakter, dan memotong nilai yang lebih panjang. (Ini lebih baik daripada menggunakan varchar2(n) , yang akan error dengan angka yang lebih panjang dan tidak akan membuat perbedaan pada string yang lebih pendek).

Anda akan memiliki masalah dengan nulls, sebagai cast(null as char(n)) - atau apa pun - masih nol, bukan n ruang seperti yang Anda harapkan. Itu mungkin menjadi masalah untuk kolom Anda, tetapi terutama untuk ekspresi kasus Anda.

Jika ada kolom yang kosong, Anda dapat menggunakan nvl atau coalesce untuk memperlakukan mereka sebagai satu ruang sebagai gantinya, dan para pemeran kemudian akan mengisinya juga:

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

Daripada casting, Anda juga bisa menggunakan rpad() :

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

Untuk ekspresi kasus, Anda dapat membuat else klausa mengevaluasi ke satu spasi alih-alih nol, tetapi Anda juga perlu menerapkan pemeran ke ekspresi kasus keseluruhan, tidak memilikinya dalam satu when cabang; jadi alih-alih ini:

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

Anda akan melakukan:

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

atau jika Anda lebih suka:

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

Klien Anda mungkin telah mengisi keseluruhan string dengan panjang yang sama (SQL*Plus akan melakukannya jika Anda set trimout off , atau jika spooling set trimspool off; yang mungkin dimaksud oleh BobC), tetapi itu tidak terlalu membantu jika apa yang sebenarnya Anda coba buat adalah bidang dengan panjang tetap , yang secara kumulatif akan memberi Anda catatan panjang tetap juga - dan jika Anda tidak memiliki bidang panjang tetap, tetap tidak mungkin untuk menafsirkan data.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle trimspool hanya membuntuti kosong (bukan kosong di depan)

  2. Format Tanggal SQL

  3. Sumber data JNDI ke oracle dengan grails 1.3

  4. Oracle mendapatkan tanggal kembali 1 jam

  5. apa perbedaan antara kata kunci gabung dan kata kunci gabung dalam di Oracle sql?