У меня проблема с форматированием данных при выполнении запроса к базе данных Oracle.
Что я хочу сделать, это экспортировать некоторые данные в формат ниже в текстовый файл;
1IN20071001 40005601054910101200 1 65
- Первый номер (1 выше) = номер компании (позиция 1-5, пробел в начале)
- IN или UT = IN для тактового входа и UT для тактового отключения (позиции 6-7)
- 20071001 = Дата (рабочая дата) в формате ГГГГММДД (позиции 8-15)
- 400056010549 = EmployeeID (поз. 16-33, выравнивание по правому краю, пропуски перед)
- 101012 = Время в формате TTMMSS (поз. 34-39)
- 00 = FT, всегда 00 (поз. 40-41)
- Пробелы = Всегда 8 пустых мест (поз. 42-49)
- 1 = Не уверен, для чего это используется, но оно всегда должно быть 1 (поз. 50, выравнивание по правому краю, пробелы перед)
- 65 = «Kostnadsställe», ENT_HR_EMPLOYEE.USERALPHA6 (поз. 51-55, выравнивание по правому краю, пропуски перед)
В настоящее время я использую запрос ниже, но на этом мои знания SQL заканчиваются ...
COLUMN one FORMAT a5 HEADER JUSTIFY RIGHT
COLUMN two FORMAT a8 HEADER two
COLUMN three FORMAT a18 HEADER three JUSTIFY RIGHT
COLUMN four FORMAT a5 HEADER three JUSTIFY RIGHT
SELECT h.fkod AS one, 'IN',
SUBSTR(t.clockindatetime,0,4) ||
SUBSTR(t.clockindatetime,6,2) ||
SUBSTR(t.clockindatetime,9,2) AS two,
i.employeeid AS three
SUBSTR(t.clockindatetime,11,6) || '00 1',
h.fkod AS four
FROM ent_time_card_detail t,
max_employeeid_history i,
ent_hr_employee h
WHERE h.enthremployeeid = t.enthremployeeid
AND h.payrollid = i.userid
AND t.clockindatetime >= i.from_date
AND (t.clockindatetime < i.to_date OR i.to_date IS NULL);
Есть ли какой-нибудь SQL-pro, который может помочь мне закончить форматирование?