Oracle stores dates in tables as 7-bytes
байт 1 - век + 100
байт 2 - (год MOD 100) + 100
байт 3 - месяц
байт 4 - день
байт 5 - час + 1
байт 6 - минута + 1
байт 7 - секунд + 1
Так 120,116,3,6,1,1,1
преобразует в:
байта 1 - век = 120 - 100 = 20
байт 2 - год = 116 - 100 = 16
байт 3 - месяц = 3
байт 4 - день = 6
байт 5 - час = 1 - 1 = 0
байт 6 - минута = 1 - 1 = 0
байт 7 - секунд = 1 - 1 = 0
Так 2016-03-06T00:00:00
Настройка Oracle:
CREATE TABLE file_upload (file_blob BLOB);
INSERT INTO file_upload VALUES (
utl_raw.cast_to_raw(
CHR(120) || CHR(116) || CHR(3) || CHR(6) || CHR(1) || CHR(1) || CHR(1)
)
);
Запрос:
SELECT DUMP(DBMS_LOB.SUBSTR(file_blob, 7, 1)) AS dmp,
TO_DATE(
TO_CHAR(
(ASCII(SUBSTR(chars, 1, 1)) - 100) * 100
+ ASCII(SUBSTR(chars, 2, 1)) - 100,
'0000'
)
|| TO_CHAR(ASCII(SUBSTR(chars, 3, 1)), '00')
|| TO_CHAR(ASCII(SUBSTR(chars, 4, 1)), '00')
|| TO_CHAR(ASCII(SUBSTR(chars, 5, 1)) - 1, '00')
|| TO_CHAR(ASCII(SUBSTR(chars, 6, 1)) - 1, '00')
|| TO_CHAR(ASCII(SUBSTR(chars, 7, 1)) - 1, '00'),
'YYYYMMDDHH24MISS'
) AS converted_date
FROM (
SELECT file_blob,
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(file_blob, 7, 1)) AS chars
FROM file_upload
);
Выход:
DMP CONVERTED_DATE
------------------------------- -------------------
Typ=23 Len=7: 120,116,3,6,1,1,1 2016-03-06 00:00:00
Точно, что я ищу, работал как шарм. Большое спасибо. –