powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Формат даты. Новые песни о старом.
9 сообщений из 9, страница 1 из 1
Формат даты. Новые песни о старом.
    #39689749
celestial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Изучаю sql по книге "101 как писать мощные и гибкие программы на pl-sql."
Книга очень древняя, но очень хорошая, для новичка самое то, материал подается легко.

Единственный косяк, который по началу был не в напряг, но, чем дальше в лес, тем.. В общем, теперь становится колом и создает неудобства.

В книге примеры имеют следующий формат.
Код: plsql
1.
SELECT * FROM product WHERE last_stockdate BETWEEN '01-JAN-03' AND '31-DEC-03';


Такой вариант на моей 11g Express Edition не работает.
где то в кулуарах интернетов нашел вот такой костыль
Код: plsql
1.
2.
3.
4.
SELECT * FROM product WHERE last_stockdate BETWEEN
	TO_DATE('01-JAN-03', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN')
	AND
	TO_DATE('31-DEC-03', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN');



эту конструкцию
Код: plsql
1.
TO_DATE('31-DEC-03', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN');


приходится использовать и в INSERT.

Где и как поменять настройку по умолчанию, чтобы не использовать эту длинную запись?
И как откатить назад?
Спасибо.
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689755
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
celestialДобрый день.
Изучаю sql по книге "101 как писать мощные и гибкие программы на pl-sql."
Книга очень древняя, но очень хорошая, для новичка самое то, материал подается легко.

Единственный косяк, который по началу был не в напряг, но, чем дальше в лес, тем.. В общем, теперь становится колом и создает неудобства.

В книге примеры имеют следующий формат.
Код: plsql
1.
SELECT * FROM product WHERE last_stockdate BETWEEN '01-JAN-03' AND '31-DEC-03';


Такой вариант на моей 11g Express Edition не работает.
где то в кулуарах интернетов нашел вот такой костыль
Код: plsql
1.
2.
3.
4.
SELECT * FROM product WHERE last_stockdate BETWEEN
	TO_DATE('01-JAN-03', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN')
	AND
	TO_DATE('31-DEC-03', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN');



эту конструкцию
Код: plsql
1.
TO_DATE('31-DEC-03', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN');


приходится использовать и в INSERT.

Где и как поменять настройку по умолчанию, чтобы не использовать эту длинную запись?
И как откатить назад?
Спасибо.

Очень хорошо, что наткнулись на эти ошибки!
Это не костыль, это правильный код, бо писать NLS зависимый код (без этого костыля) - закладывать мину в работу программы.
Не факт, что Ваше поделие будет работать с теми же настройками сессии что и у Вас

Если очень хочется, то смените настроки, но помните скказанное Выше

Код: plsql
1.
2.
ALTER SESSION SET NLS_DATE_FORMAT= 'DD-MON-YY'
ALTER SESSION SET 'NLS_DATE_LANGUAGE = AMERICAN'



А прочитать о NLS, можно хотя бы тут Database 2 Day Developer's Guide:About Initial NLS Parameter Values
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689760
celestial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,
Спасибо за мануал.
жаль, тут нельзя в карму + закинуть.
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689762
celestial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и кстати, вот так вполне работает.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> SELECT * FROM product WHERE last_stockdate BETWEEN '01.01.2003' AND '31.12.2003';

PRODUCT_NAME              PRODUCT_PRICE QUANTITY_ON_HAND LAST_STO
------------------------- ------------- ---------------- --------
Small Widget                         99                1 15.01.03
Chrome Phoobar                       50              100 15.01.03

SQL>
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689765
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
celestialВ книге примеры имеют следующий формат.
Код: plsql
1.
SELECT * FROM product WHERE last_stockdate BETWEEN '01-JAN-03' AND '31-DEC-03';

Код: sql
1.
2.
date 'ГГГГ-ММ-ДД'
timestamp 'ГГГГ-ММ-ДД чч:мм:сс'

стандартные литералы даты и времени.
Чуть многословно, но совсем несложно для использования.
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689777
celestial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> SELECT * FROM product WHERE last_stockdate > '2003-01-01';
SELECT * FROM product WHERE last_stockdate > '2003-01-01'
                                             *
ERROR at line 1:
ORA-01861: literal does not match format string


SQL>
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689783
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так не надо использовать строковые литералы там, где нужны литералы даты. Открой уже
документацию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689785
celestial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок. спасибо всем.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * FROM nls_session_parameters;

NLS_DATE_FORMAT
DD.MM.RR

NLS_DATE_LANGUAGE
RUSSIAN

NLS_SORT
RUSSIAN
...
Рейтинг: 0 / 0
Формат даты. Новые песни о старом.
    #39689788
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
celestial
Код: plsql
1.
ORA-01861: literal does not match format string

Код: sql
1.
date'ГГГГ-ММ-ДД'

Так понятнее?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Формат даты. Новые песни о старом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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