Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
Есть тип , описанный в xml схеме как
xsd:dateTime
.

В процедуру данный тип приходит в xml-е как
2001-12-17T09:30:47Z
,

Может кто знает, есть ли возможность преобразовать этот параметр в тип TIMESTAMP ?
16 мар 10, 16:21    [8487414]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
Data Type
Guest
missenka,

                v_year := substr(v_datestr,
                                 1,
                                 4);
                v_month := substr(v_datestr,
                                  6,
                                  2);
                v_day := substr(v_datestr,
                                9,
                                2);
                v_time := substr(v_datestr,
                                 12,
                                 8);

и делайте преобразование

to_timestamp(v_day || '.' ||
                                                               v_month || '.' ||
                                                               v_year || ' ' ||
                                                               v_time,
                                                               '''dd.mm.yyyy hh24:mi:ss''');
16 мар 10, 16:24    [8487437]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
AmKad
Member

Откуда:
Сообщений: 5222
missenka,

select to_date(substr(translate('2001-12-17T09:30:47Z','T', ' '),1, 19) , 'yyyy-mm-dd hh24:mi:ss')
from dual
16 мар 10, 16:27    [8487474]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
ну это уж совсем на худой конец
16 мар 10, 16:29    [8487497]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
AmKad
Member

Откуда:
Сообщений: 5222
missenka,

select to_timestamp(substr(translate('2001-12-17T09:30:47Z','T', ' '),1, 19) , 'yyyy-mm-dd hh24:mi:ss')
from dual
16 мар 10, 16:29    [8487498]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
проходил мимо...
Guest
AmKad,

зачем substr?

select to_timestamp(translate('2001-12-17T09:30:47Z','TZ',' '),'YYYY-MM-DD HH24:MI:SS') from dual
или T и Z в оригинальном формате несут какой-то сакральный смысл?
16 мар 10, 16:31    [8487520]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
AmKad
Member

Откуда:
Сообщений: 5222
AmKad,

Обойтись кстати можно и без SubStr
select to_timestamp(translate('2001-12-17T09:30:47Z','T|Z', ' ') , 'yyyy-mm-dd hh24:mi:ss')
from dual
16 мар 10, 16:32    [8487528]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
to_timestamp_tz( replace( value, 'T' ), 'yyyy-mm-ddhh24:mi:ss tzr tzd' )
16 мар 10, 16:33    [8487538]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
проходил мимо...,

Z - зона

T - ну такой вот формат у datetime ...
16 мар 10, 16:36    [8487563]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
AlexFF__|,
ваш запрос выдает
'17.12.01 09:30:47,000000000 +00:00'
16 мар 10, 16:38    [8487573]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
missenka
AlexFF__|,
ваш запрос выдает
'17.12.01 09:30:47,000000000 +00:00'

и?
16 мар 10, 16:40    [8487588]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
AlexFF__|,
не пройдет валидацию по схеме
16 мар 10, 16:41    [8487603]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
проходил мимо...
Guest
missenka
не пройдет валидацию по схеме

вы значение типа таймстамп собираетесь по xml схеме валидировать?
16 мар 10, 16:42    [8487616]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
missenka
AlexFF__|,
не пройдет валидацию по схеме


валидацию проходит
 2001-12-17T09:30:47Z

Это выражение для ваших нужд.
16 мар 10, 16:44    [8487623]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
AlexFF__|,
спасибо =)
16 мар 10, 16:45    [8487643]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
missenka
проходил мимо...,

Z - зона

T - ну такой вот формат у datetime ...

http://books.xmlschemata.org/relaxng/ch19-77049.html

[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
The time zone may be specified as Z (UTC) or (+|-)hh:mm. Time zones that aren't specified are considered undetermined.


По-моему можно Z заменить на +00:00, тогда:

select to_timestamp_tz(replace('2001-12-17T09:30:47Z', 'Z', '+00:00'), 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
from DUAL;
16 мар 10, 16:49    [8487683]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
AmKad
AmKad,

Обойтись кстати можно и без SubStr


можно и без TRANSLATE:

select to_timestamp('2001-12-17T09:30:47Z','yyyy-mm-dd"T"hh24:mi:ss"Z"')
from dual
/

TO_TIMESTAMP('2001-12-17T09:30:47Z','YYYY-MM-DD"T"HH24:MI:SS"Z"')
---------------------------------------------------------------------------
17-DEC-01 09.30.47.000000000 AM

SQL> 

Same applies to replace in AlexFF__| suggestion.

SY.
16 мар 10, 16:53    [8487710]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
еще такой вопрос

xml с датой формата
 '2001-12-17T09:30:47Z'

не валидируется стандартным оператором isShemaValid, выдает ошибку.

Есть пакеты, типа dbms_xmlgen которые преобразуют дату данного формата к формату, который пройдет валидацию?
17 мар 10, 16:52    [8493511]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

On 17.03.2010 16:52, missenka wrote:

> xml с датой формата
>
> '2001-12-17T09:30:47Z'
>
>
> не валидируется стандартным оператором isShemaValid, выдает ошибку.
>

Какой тип указан в схеме для этого элемента - xsd:dateTime?

Posted via ActualForum NNTP Server 1.4

17 мар 10, 17:04    [8493589]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
Denis Popov,

да, он самый.
17 мар 10, 17:06    [8493593]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
missenka
да, он самый.

По-моему проверка валится не из-за этого:
SQL> begin
  2     dbms_xmlschema.registerSchema('test',
  3  '<?xml version="1.0" encoding="UTF-8"?>
  4  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  5              elementFormDefault="qualified"
  6              attributeFormDefault="unqualified">
  7    <xsd:element name="root" nillable="false">
  8      <xsd:complexType>
  9        <xsd:sequence>
 10          <xsd:element name="value" nillable="false" type="xsd:dateTime"/>
 11        </xsd:sequence>
 12      </xsd:complexType>
 13    </xsd:element>
 14  </xsd:schema>'
 15  , true, true, false);
 16  end;
 17  /

PL/SQL procedure successfully completed.

SQL> declare
  2    xml XmlType := XmlType('<root><value>2001-12-17T09:30:47Z</value></root>');
  3  begin
  4    dbms_output.put_line('xml.isSchemaValid(''test'') : '||xml.isSchemaValid('test'));
  5  end;
  6  /
xml.isSchemaValid('test') : 1
17 мар 10, 17:18    [8493679]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
Denis Popov,
да, Вы правы

не проходит приведение к timestamp

<REQUEST xmlns="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="metabank D:\Altova\MyExchange.xsd">
	<HEADER UNI="AC0A004003" MODULE="TT" USERID="TEST"/>
	<COMMAND>
		<GET_DICTIONARY NAME="DIC" UPDATED="17.12.01 09:30:47,000000000"/>
	</COMMAND>
</REQUEST>
17 мар 10, 17:49    [8493914]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

On 17.03.2010 17:49, missenka wrote:

> не проходит приведение к timestamp


Так приводи его к TOMESTAMP WITH TIMEZONE

select to_char(current_timestamp, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM') from DUAL;

Posted via ActualForum NNTP Server 1.4

17 мар 10, 18:03    [8494020]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
Denis Popov,
так это возвращает
то, что я писала выше....
18 мар 10, 10:45    [8495969]     Ответить | Цитировать Сообщить модератору
 Re: преобразование в TIMESTAMP  [new]
missenka
Member

Откуда: Москва
Сообщений: 106
Denis Popov,

дело в том, что возвращается ошибка при вызове isShemaValid

<RESPONSE xmlns="ttt" >
	<HEADER UNI="820E9E4546BBC929E04010AC0A0065BC" MODULE="TT" USERID="TEST"/>
	<RESULT CODE="4" ERR_MSG="Не корректный XML-документ" TECH_MSG="ORA-30992: error occurred at Xpath /REQUEST/COMMAND/GET_DICTIONARY[@LAST_UPDATED]
ORA-01830: date format picture ends before converting entire input string
ORA-06512: at "SYS.XMLTYPE", line 345
ORA-06512: at "MCB_EXCHANGE.EXMAIN", line 772
"/>
	<DATA COMMAND="Unknown"/>
</RESPONSE>

в Альтове это валидацию проходит......
18 мар 10, 11:12    [8496191]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить