Oracle
 sql >> база данни >  >> RDS >> Oracle

Създайте изходен файл с плосък формат с фиксирана ширина от SQL заявка

Прехвърляте стойностите на колоните си към char(n) , което ще допълни по-къси низове и числа (неявно преобразувани в низове) до n chars и отрязва по-дълги стойности. (Това е по-добре от използването на varchar2(n) , което би довело до грешка при по-дълги числа и няма да има никаква разлика при по-къси низове).

Все пак ще имате проблем с нули, тъй като cast(null as char(n)) - или нещо друго - все още е нула, а не n пространства, както може да очаквате. Това може да е проблем за която и да е от вашите колони, но особено за вашите изрази за регистър.

Ако някои колони могат да бъдат нулеви, можете да използвате nvl или coalesce за да ги третира вместо това като едно пространство и актьорският състав след това ще запълни и тях:

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

Вместо кастинг, можете също да използвате rpad() :

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

За изразите за регистър можете да направите else клауза оценява на единичен интервал вместо null, но вие също трябва да приложите преобразуването към общия израз на case, а не да го имате в рамките на един when клон; така че вместо това:

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

бихте направили:

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

или ако предпочитате:

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

Вашият клиент може така или иначе да е допълвал надясно целия низ до същата дължина (SQL*Plus ще направи това, ако сте set trimout off , или ако се спулира set trimspool off; което може да е това, за което BobC имаше предвид), но това всъщност не помага, ако това, което наистина се опитвате да създадете, са полета с фиксирана дължина , което кумулативно ще ви даде и запис с фиксирана дължина - и ако нямате полета с фиксирана дължина, така или иначе би било невъзможно да интерпретирате данните.



  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 12c клиент

  2. if (изберете брой (колона) от таблица)> 0 тогава

  3. Това проблем на Microsoft или Oracle ли е?

  4. Сравняване на дати с помощта на Dynamic Action на DatePicker Oracle Apex

  5. Как да преброим срещанията на разделител в низ, с изключение на тези в кавички