powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция to_date отбрасывает век
25 сообщений из 38, страница 1 из 2
Функция to_date отбрасывает век
    #39890629
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потребовалось конвертнуть строку '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
Функция to_date отбрасывает век
    #39890640
Фотография 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> 
...
Рейтинг: 0 / 0
Функция to_date отбрасывает век
    #39890646
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Функция to_date отбрасывает век
    #39890647
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Как сделать, чтобы...
Может, руки надо помыть тому заскорузлому пацану, что клавиши давит? Не хочет сам — силой ему помыть! Прямо в его же присутствии.
...
Рейтинг: 0 / 0
Функция to_date отбрасывает век
    #39890650
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В запросе у меня тоже выводит 2119 год, а в процедуре, в отладчике, показывает 19 год.
...
Рейтинг: 0 / 0
Функция to_date отбрасывает век
    #39890655
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
показывает 19 год.
Код: sql
1.
to_char(поле_дата, строка_формата)

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


Не верим

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


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

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

Код: 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
Функция to_date отбрасывает век
    #39890677
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
В запросе у меня тоже выводит 2119 год, а в процедуре, в отладчике, показывает 19 год.


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

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

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

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


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

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

при чем тут база. На своем клиенте сделай настройки
...
Рейтинг: 0 / 0
Функция to_date отбрасывает век
    #39890697
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Функция to_date отбрасывает век
    #39890707
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
Sergey_rb,

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


При чем здесь клиент, так работает хранимая процедура в Oracle, которая запускается оракловым джобом.
...
Рейтинг: 0 / 0
Функция to_date отбрасывает век
    #39890727
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Функция to_date отбрасывает век
    #39890733
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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
Функция to_date отбрасывает век
    #39890741
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Функция to_date отбрасывает век
    #39890748
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Функция to_date отбрасывает век
    #39890751
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

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


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

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

Код: 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
Функция to_date отбрасывает век
    #39890844
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
oragraf
Sergey_rb,

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


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


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