Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция to_date отбрасывает век / 25 сообщений из 38, страница 1 из 2
18.11.2019, 16:27
    #39890629
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Потребовалось конвертнуть строку '2119-01-01' в дату, в результате в базу попала дата 01.01.2019.
Оказалось что to_date('2119-01-01', 'yyyy-mm-dd') возвращает не 01.01.2119, а 01.01.19, после чего в базу записывается дата 01.01.2019.

Как сделать, чтобы to_date учитывала век?
...
Рейтинг: 0 / 0
18.11.2019, 16:37
    #39890640
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select to_date('2119-01-01', 'yyyy-mm-dd') d from dual;
D
-----------
01.01.2119

SQL> 
...
Рейтинг: 0 / 0
18.11.2019, 16:44
    #39890646
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb,

Не верю!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
SQL> connect ...

SQL> select to_char(to_date('01-01-2119','DD-MM-YYYY'),'DD/MM/YYYY') as d from dual;

D
----------
01/01/2119

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE    12.1.0.2.0      Production
TNS for Solaris: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

SQL> connect ...

SQL>  select to_char(to_date('01-01-2119','DD-MM-YYYY'),'DD/MM/YYYY') as d from dual;

D
----------
01/01/2119

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for Solaris: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

SQL> select to_char(to_date('01-01-2119','DD-MM-YYYY'),'DD/MM/YYYY') as d from dual;

D
----------
01/01/2119

SQL> connect ...

SQL>  select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production



Сир,
Студентам, желающим помощи
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные (если возможно), лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
...
select 1245,'name10245',to_date('11.02.3167','DD.MM.YYYY') from dual 
)
select col2 from tbl
...


2) Покажите что сделали
3) Покажите что получили (Лучше в текстовом виде, а не screenshot)
4) используйте Тэги, читать код без них неудобно
5) "Портянки текста", лучше убрать под spoiler или приложить файлом
6) Обязательно укажите версии сервера и клиента
...
Рейтинг: 0 / 0
18.11.2019, 16:44
    #39890647
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
Как сделать, чтобы...
Может, руки надо помыть тому заскорузлому пацану, что клавиши давит? Не хочет сам — силой ему помыть! Прямо в его же присутствии.
...
Рейтинг: 0 / 0
18.11.2019, 16:49
    #39890650
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
В запросе у меня тоже выводит 2119 год, а в процедуре, в отладчике, показывает 19 год.
...
Рейтинг: 0 / 0
18.11.2019, 16:51
    #39890655
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
показывает 19 год.
Код: sql
1.
to_char(поле_дата, строка_формата)

подтверждает ваше мнение?
...
Рейтинг: 0 / 0
18.11.2019, 16:52
    #39890658
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
В запросе у меня тоже выводит 2119 год, а в процедуре, в отладчике, показывает 19 год.


Не верим

еще раз, по шагам, что делали, что увидели, какие клиенты
не в пересказе, документы
...
Рейтинг: 0 / 0
18.11.2019, 17:01
    #39890673
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
В запросе у меня тоже выводит 2119 год, а в процедуре, в отладчике, показывает 19 год.


показывает 19 год., почему Вы уверены что век 20-й (мож 21-й, 19-й и тд)?

.....
stax
...
Рейтинг: 0 / 0
18.11.2019, 17:02
    #39890675
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Процедура

Код: plsql
1.
2.
3.
4.
5.
6.
procedure test_date
as
  v_date date;
begin
  v_date:=to_date('2119-01-01','yyyy-dd-mm');
end; 




Отладчик

Код: plsql
1.
v_date  01.01.19
...
Рейтинг: 0 / 0
18.11.2019, 17:04
    #39890677
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
В запросе у меня тоже выводит 2119 год, а в процедуре, в отладчике, показывает 19 год.


Значит смотри NLS_DATE_FORMAT в отладчике.

SY.
...
Рейтинг: 0 / 0
18.11.2019, 17:06
    #39890678
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
Отладчик
Код: plsql
1.
v_date  01.01.19

"Чернила, шельма, экономил"(с).
зы. Сделай уже нормальные NLS-настройки.
...
Рейтинг: 0 / 0
18.11.2019, 17:09
    #39890684
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Код: plsql
1.
 NLS_DATE_FORMAT = DD.MM.RR
...
Рейтинг: 0 / 0
18.11.2019, 17:10
    #39890685
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
oragraf
Sergey_rb
Отладчик
Код: plsql
1.
v_date  01.01.19

"Чернила, шельма, экономил"(с).
зы. Сделай уже нормальные NLS-настройки.


База не моя, так что...
...
Рейтинг: 0 / 0
18.11.2019, 17:19
    #39890693
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
Отладчик
Код: plsql
1.
v_date  01.01.19

Это определенно 3719 год!
:-)
...
Рейтинг: 0 / 0
18.11.2019, 17:20
    #39890694
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb,

при чем тут база. На своем клиенте сделай настройки
...
Рейтинг: 0 / 0
18.11.2019, 17:21
    #39890697
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
andrey_anonymous
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select to_date('2119-01-01', 'yyyy-mm-dd') d from dual;
D
-----------
01.01.2119

SQL> 

Что сие демонстрирует? У меня:
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select to_date('2119-01-01', 'yyyy-mm-dd') d from dual;
D
----------------------
Демонстрация просрации

SQL> 

Может от версии зависит?? Надо у Vadim Lejnin спросить!
...
Рейтинг: 0 / 0
18.11.2019, 17:31
    #39890707
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
oragraf
Sergey_rb,

при чем тут база. На своем клиенте сделай настройки


При чем здесь клиент, так работает хранимая процедура в Oracle, которая запускается оракловым джобом.
...
Рейтинг: 0 / 0
18.11.2019, 18:00
    #39890727
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb

При чем здесь клиент, так работает хранимая процедура в Oracle, которая запускается оракловым джобом.


у джоба тоже есть нлс параметры

приведите оператор (insert/update) записи в базу

мож там двойная конвертация в date
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
sql> ed
Wrote file afiedt.buf

  1* select to_char(to_date(to_date('2119-01-01', 'yyyy-mm-dd')),'yyyy-mm-dd') d from dual
sql> /

D
----------
2019-01-01


....
stax
...
Рейтинг: 0 / 0
18.11.2019, 18:10
    #39890733
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
[quot Sergey_rb#22019026]
oragraf

При чем здесь клиент, так работает хранимая процедура в Oracle, которая запускается оракловым джобом.


Приехали. A что джоб не клиент? Короче, если джоб это DBMS_JOB, то:

Код: plsql
1.
2.
3.
SELECT  NLS_ENV
  FROM  DBA_JOBS
  WHERE JOB = ...



А если DMS_SCHEDULER_JOB, то:

Код: plsql
1.
2.
3.
SELECT  NLS_ENV
  FROM  DBA_SCHEDULER_JOBS
  WHERE JOB_NAME = ...



SY.
...
Рейтинг: 0 / 0
18.11.2019, 18:19
    #39890741
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
SY,
Сергей что-то недоговаривает

to_date('2119-01-01', 'yyyy-mm-dd') вернет 01.01.2119 "независимо" от НЛС

подозрения у меня что там неявное преобразование даты в дату

напр ф-ция my_func(d varchar2 ) ...,
a вызывается my_func(to_date('2119-01-01', 'yyyy-mm-dd'))
.....
stax
...
Рейтинг: 0 / 0
18.11.2019, 18:26
    #39890748
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Stax
SY,
подозрения у меня что там неявное преобразование даты в дату


Stax, select to_date('2119-01-01', 'yyyy-mm-dd') from dual; и еcть неявное преобразование:


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';

VALUE
-----------------------------------------------------------------------------------
DD-MON-RR

SQL> select to_date('2119-01-01', 'yyyy-mm-dd') from dual;

TO_DATE('
---------
01-JAN-19

SQL> 



SY.
...
Рейтинг: 0 / 0
18.11.2019, 18:32
    #39890751
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
SY,

авторОказалось что to_date('2119-01-01', 'yyyy-mm-dd') возвращает не 01.01.2119, а 01.01.19, после чего в базу записывается дата 01.01.2019.


я так понял у него в базе плохо, а не только при отображении даты

.....
stax
...
Рейтинг: 0 / 0
18.11.2019, 18:33
    #39890752
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Если

Код: plsql
1.
select to_date(date_field) from table;



С RR и будет 2019 :)

Database PL/SQL Packages and Types Reference
DBMS_DEBUG

Overview

To debug server-side code, you must have two database sessions: one session to run the code in debug mode (the target session), and a second session to supervise the target session (the debug session).

The target session becomes available for debugging by making initializing calls with DBMS_DEBUG. This marks the session so that the PL/SQL interpreter runs in debug mode and generates debug events. As debug events are generated, they are posted from the session. In most cases, debug events require return notification: the interpreter pauses awaiting a reply.




Настраивать нужно чтобы сессия по умолчанию жрала нужный NLS_DATE_FORMAT...
Popup values in Debugger
...
Рейтинг: 0 / 0
18.11.2019, 23:30
    #39890844
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
Sergey_rb
oragraf
Sergey_rb,

при чем тут база. На своем клиенте сделай настройки


При чем здесь клиент, так работает хранимая процедура в Oracle, которая запускается оракловым джобом.
Вот ты тугой, а! Если бы ты сделал норм тесткейс, тебе уже давно бы показали, где ошибка. Вместо этого ты ходишь в трех соснах и то строчку в дату, то джоб у тебя непонятно что преобразует. Тебе уже написали, что у джоба есть nls-параметры тоже.
...
Рейтинг: 0 / 0
19.11.2019, 07:30
    #39890871
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция to_date отбрасывает век
oragraf
Вот ты тугой, а!
А я думал, что все настолько хотят помочь, что никто не догадается.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция to_date отбрасывает век / 25 сообщений из 38, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]