, , , ,

xsd datetime в Oracle DB

понедельник, 5 апреля 2010 г. Оставить комментарий

Для преобразования даты и времени из DB Oracle в дату и время XSD можно воспользоваться следующим шаблоном 'yyyy-mm-dd"T"hh24:mi:ss.ff6tzr'.
Почитать о дате и времени в xsd можно тут. О форматах шаблона преобразования в Oracle DB тут.

Посмотрим на примерах, преобразуем дату и время в datetime xsd.


select xmlelement(depts, xmlagg(
xmlelement(dept,
xmlforest(deptno,
dname,
loc,
to_char(systimestamp+numtodsinterval(rownum,'minute'),
'yyyy-mm-dd"T"hh24:mi:ss.ff6tzr') as ts
)
)
)).getclobval()
from dept;

Результат:

<DEPTS>
<DEPT>
<DEPTNO>10</DEPTNO>
<DNAME>ACCOUNTING</DNAME>
<LOC>NEW YORK</LOC>
<TS>2010-03-29T18:59:48.898873+04:00</TS>
</DEPT>
<DEPT>
<DEPTNO>20</DEPTNO>
<DNAME>RESEARCH</DNAME>
<LOC>DALLAS</LOC>
<TS>2010-03-29T19:00:48.898873+04:00</TS>
</DEPT>
<DEPT>
<DEPTNO>30</DEPTNO>
<DNAME>SALES</DNAME>
<LOC>CHICAGO</LOC>
<TS>2010-03-29T19:01:48.898873+04:00</TS>
</DEPT>
<DEPT>
<DEPTNO>40</DEPTNO>
<DNAME>OPERATIONS</DNAME>
<LOC>BOSTON</LOC>
<TS>2010-03-29T19:02:48.898873+04:00</TS>
</DEPT>
</DEPTS>

А теперь datetime xsd преобразуем в timestamp Oracle DB.

SQL> COLUMN DEPTNO FORMAT A8
SQL> COLUMN DNAME FORMAT A12
SQL> COLUMN LOC FORMAT A12
SQL>
SQL> select extractvalue(value(row_dept), '/DEPT/DEPTNO') as deptno,
2 extractvalue(value(row_dept), '/DEPT/DNAME') as dname,
3 extractvalue(value(row_dept), '/DEPT/LOC') as loc,
4 to_timestamp_tz(extractvalue(value(row_dept), '/DEPT/TS'),
5 'yyyy-mm-dd"T"hh24:mi:ss.ff6tzh:tzm') as ts
6 from (
7 select xmltype(
8 '<DEPTS>
9 <DEPT>
10 <DEPTNO>10</DEPTNO>
11 <DNAME>ACCOUNTING</DNAME>
12 <LOC>NEW YORK</LOC>
13 <TS>2010-03-29T18:59:48.898873+04:00</TS>
14 </DEPT>
15 <DEPT>
16 <DEPTNO>20</DEPTNO>
17 <DNAME>RESEARCH</DNAME>
18 <LOC>DALLAS</LOC>
19 <TS>2010-03-29T19:00:48.898873+04:00</TS>
20 </DEPT>
21 <DEPT>
22 <DEPTNO>30</DEPTNO>
23 <DNAME>SALES</DNAME>
24 <LOC>CHICAGO</LOC>
25 <TS>2010-03-29T19:01:48.898873+04:00</TS>
26 </DEPT>
27 <DEPT>
28 <DEPTNO>40</DEPTNO>
29 <DNAME>OPERATIONS</DNAME>
30 <LOC>BOSTON</LOC>
31 <TS>2010-03-29T19:02:48.898873+04:00</TS>
32 </DEPT>
33 </DEPTS>') as xml_data
34 from dual
35 ) xml_table,
36 table(xmlsequence(extract(xml_table.xml_data, '/DEPTS/DEPT'))) row_dept;

DEPTNO DNAME LOC TS
-------- ------------ ------------ -------------------------------------------------
10 ACCOUNTING NEW YORK 29.03.10 18:59:48,898873000 +04:00
20 RESEARCH DALLAS 29.03.10 19:00:48,898873000 +04:00
30 SALES CHICAGO 29.03.10 19:01:48,898873000 +04:00
40 OPERATIONS BOSTON 29.03.10 19:02:48,898873000 +04:00


0 коммент. »

Оставьте Ваш комментарий