Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tạo tệp đầu ra định dạng phẳng có chiều rộng cố định từ truy vấn SQL

Bạn đang truyền các giá trị cột của mình thành char(n) , sẽ chèn các chuỗi và số ngắn hơn (được chuyển đổi hoàn toàn thành chuỗi) thành n ký tự và cắt bớt các giá trị dài hơn. (Điều này tốt hơn là sử dụng varchar2(n) , điều này sẽ gây ra lỗi với các số dài hơn và sẽ không tạo ra bất kỳ sự khác biệt nào đối với các chuỗi ngắn hơn).

Tuy nhiên, bạn sẽ gặp sự cố với null, vì cast(null as char(n)) - hoặc bất cứ điều gì khác - vẫn là rỗng, thay vì n không gian như bạn có thể mong đợi. Đó có thể là vấn đề đối với bất kỳ cột nào của bạn, nhưng đặc biệt là đối với các biểu thức chữ viết hoa của bạn.

Nếu bất kỳ cột nào có thể là rỗng, bạn có thể sử dụng nvl hoặc coalesce thay vào đó, coi chúng như một không gian duy nhất và dàn diễn viên cũng sẽ đệm chúng:

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

Thay vì truyền, bạn cũng có thể sử dụng rpad() :

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

Đối với các biểu thức chữ hoa, bạn có thể tạo else mệnh đề đánh giá thành một khoảng trắng duy nhất thay vì null, nhưng bạn cũng cần áp dụng ép kiểu cho biểu thức viết hoa tổng thể, không đặt nó trong một when chi nhánh; vì vậy thay vì thế này:

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

bạn sẽ làm:

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

hoặc nếu bạn thích:

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

Khách hàng của bạn có thể đã đệm phải chuỗi tổng thể về cùng độ dài (SQL * Plus sẽ thực hiện điều đó nếu bạn đã set trimout off hoặc nếu spooling set trimspool off; có thể là những gì BobC đang đề cập đến), nhưng điều đó không thực sự hữu ích nếu những gì bạn thực sự đang cố gắng tạo là trường có độ dài cố định , tính năng này cũng sẽ cung cấp cho bạn một bản ghi độ dài cố định - và nếu bạn không có các trường độ dài cố định thì dù sao cũng không thể diễn giải dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kiếm một chuỗi cho một mẫu biểu thức chính quy và thay thế mỗi lần xuất hiện dưới dạng một dẫn xuất của chính nó trong SQL oracle

  2. sự khác biệt ngày tháng

  3. tên bảng động trong câu lệnh chọn

  4. regex để tìm và tránh dấu chấm kép trong Oracle

  5. Hàm Oracle trả về sự giống nhau giữa các chuỗi