Oracle数据库查询格式

Oracle数据库查询格式,oracle,select,concatenation,Oracle,Select,Concatenation,在对Oracle数据库进行查询时,我遇到了格式化数据的问题 我想做的是将一些数据导出到下面的格式中,并转换成一个文本文件 1IN20071001 40005601054910101200 1 65 第一个数字(上面1)=公司编号(位置1-5,前面空白) IN或UT=时钟输入时为IN,时钟输出时为UT(位置6-7) 20071001=日期(营业日期),格式为YYYYMMDD(位置8-15) 400056010549=员工ID(位置16-33,右对齐,

在对Oracle数据库进行查询时,我遇到了格式化数据的问题

我想做的是将一些数据导出到下面的格式中,并转换成一个文本文件

    1IN20071001      40005601054910101200            1   65
  • 第一个数字(上面1)=公司编号(位置1-5,前面空白)
  • IN或UT=时钟输入时为IN,时钟输出时为UT(位置6-7)
  • 20071001=日期(营业日期),格式为YYYYMMDD(位置8-15)
  • 400056010549=员工ID(位置16-33,右对齐,正面空白)
  • 101012=TTMMSS格式的时间(位置34-39)
  • 00=英尺,始终为00(位置40-41)
  • 空格=始终为8个空格(位置42-49)
  • 1=不确定其用途,但应始终为1(位置50,右对齐,前面空白)
  • 65=“Kostnadstä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);
第一列格式a5标题右对齐
第二列格式a8标题二
第三列格式a18标题三右对齐
第四列格式a5标题三右对齐
选择h.fkod作为一个“IN”,
SUBSTR(t.clockindatetime,0,4)||
SUBSTR(t.clockindatetime,6,2)||
SUBSTR(t.clockindatetime,9,2)作为两个,
i、 三个雇员
SUBSTR(t.clockindatetime,11,6)| |“00 1”,
h、 fkod为四
从ent\u time\u card\u详图t,
max_employeeid_history i,
企业人力资源部员工人力资源部
其中h.enthremployeeid=t.enthremployeeid
h.payrollid=i.userid
和t.clockindatetime>=i.from_日期
和(t.clockindatetime

有任何SQL pro可以帮助我完成格式化吗?

如果t.clockindatetime是oracle日期,为什么不使用:
到_CHAR(t.clockindatetime,'yyyyymmdd')
用于日期部分和
TO_CHAR(t.clockindatetime,'HHMISS')
时间部分(如果您希望小时数为24小时格式,请使用
TO_CHAR(t.clockindatetime,'HH24MISS')
(小时数仍然只占2个字符))

您还可以使用填充输出和截断额外的字符

超级可爱,你们帮我节省了周末!)

查询:

SELECT lpad('1',5) || 'IN' ||
    TO_CHAR(t.clockindatetime, 'YYYYMMDD') ||
    lpad(i.employeeid,18) ||
    TO_CHAR(t.clockindatetime, 'HH24MISS') ||
    '00        1' ||
    lpad('h.useralpha6',5)
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);
我仍然需要弄清楚时间卡详细信息或人力资源员工表如何与我用于第1列的“公司编号”相关,以及如何锁定时间卡帖子进行篡改,但这可以等到周一

非常感谢! /佩特

    1IN20081106          1234123412101500        1   64                                                                                     
    1IN20081106              234512385100        1   64                                                                                     
    1IN20081107              234515261900        1   64