Форум: "Базы";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
ВнизЗапрос по дате Найти похожие ветки
← →
rel_ (2003-12-18 12:45) [0]Мастера, использую компоненты прямого доступа к Oracle.
Пишу наимпримитивнейший запрос :
select * from tab where data1="01.10.2002"
Вылетает ошибка : "месяц неверен"
В чём беда, не знаю. Через BDE и в TOAD"е всё работает ???
← →
Sandman25 (2003-12-18 12:45) [1]Параметры использовать!!!
← →
DenK_vrtz (2003-12-18 13:07) [2]что в nls_lang записано?
← →
DenK_vrtz (2003-12-18 13:11) [3]либо попробуй написать
select * from tab where to_char(data1,"DD.MM.YYYY")="01.10.2002"
только в данном случает про индекс по полю data1(если такой есть) придется забыть
← →
rel_ (2003-12-18 13:17) [4]Ну спасибо - щас попробую !!!
to DenK_vrtz © а что такое nls_lang ???
to Sandman25 © нужно без параметров.
← →
JibSkeart (2003-12-18 13:20) [5]Как это нужно без параметров ??? :)
ну тогды делай конверт или каст
← →
rel_ (2003-12-18 13:24) [6]Мастера, боюсь, что перевод в char не подойдёт, т.к. на самом деле мне необходимо решить след. задачу.
в табл. есть 2 поля : напримен mes и god. Нужно взять значения с максимальной датой . Делаю следующее:
SELECT MAX (
CAST ( "01."
|| mes
|| "."
|| god AS DATE)
) AS dat
FROM tab
Вот здеся и ругается !!!
← →
JibSkeart (2003-12-18 13:25) [7]а что за ошибку пишет ,
да и вообще какой формат даты ?
← →
rel_ (2003-12-18 13:32) [8]Вот мне и нужно знать как задать фомрат даты.
Я собираю в запросе дату из 3-х значений - получется нечто вроде "dd.mm.yyyy". - вылетает ошибка "месяц неверен".
← →
JibSkeart (2003-12-18 13:36) [9]тогда пробуй mm.dd.yyyy
или в самом оракле выставь формат даты
← →
rel_ (2003-12-18 13:45) [10]Не понял . Проясни.
Что значит пробуй mm.dd.yyyy ???
Если то, что предложил DenK_vrtz, то не пройдёт, т.к. мне нужно получить не строку а именно дату, чтобы взять максимальное значение.
← →
Reindeer Moss Eater (2003-12-18 13:51) [11]Я собираю в запросе дату из 3-х значений - получется нечто вроде "dd.mm.yyyy". - вылетает ошибка "месяц неверен".
TO_DATE(DATE_STRING,MASK_STRING);
Date Format Specifiers
Format Model Description
CC, SCC Century (S prefixes BC dates with a minus sign)
YYYY, SYYYY Year (S prefixes BC dates with a minus sign)
IYYY Year based on ISO standard
YYY, YY, Y Last three, two or one digits of the year
IYY, IY, I Last three, two or one digits of the ISO year
Y,YYY (Four Y"s with comma) put a comma in the year (1,995)
YEAR, SYEAR Year spelled out (S prefixes BC dates with a minus sign)
RR Last two digits of year in another century (allows for year 2000)
BC, AD BC or AD indicator
B.C., A.D. BC or AD indicators with periods
Q Numeric quarter of the year (1-4 with Jan-Mar=1)
MM 2 number month (Jan = 01)
RM Roman numeral month
MONTH Name of month spelled out (upper case - month is upper case)
MON abbreviated name of month (upper case - month is upper case)
WW Week of the year (1-53)
IW Week of the year (1-52, 1-53) based on ISO standard
W Week of month (1-5)
DDD day of year (1-366) (Don"t forget leap years)
DD day of month (1-31)
D day of week (1-7)
DAY Name of day (upper case, day is upper case)
DY Abbreviated name of day
J Julian day (Number of days since January 1, 4712 BC)
AM,PM Meridian indicator
A.M., P.M. Meridian indicator with periods.
HH, HH12 Hour of day (0-12)
HH24 Use 24 hour clock for hours (1-24)
MI Minute (0-59)
SS Second (0-60)
SSSSS (five S"s) seconds past midnight. (0-86399)
None Date must be in the format "DD-MON-YY";
← →
rel_ (2003-12-18 14:37) [12]to Reindeer Moss Eater ©
Просто немеренное спасибо - всё получилось.
← →
DenK_vrtz (2003-12-18 14:56) [13]>rel_
to_date,
to_char -
это все конечно хорошо, но придется везде приводить дату к определенному формату.
Кое значение параметра nls_lang? (искать в реестре)
← →
hCat (2003-12-25 15:41) [14]2 DenK_vrtz
> Кое значение параметра nls_lang? (искать в реестре)
Реально конвертацией строки в дату и наоборот управляет параметр nls_date_format. Если он не задан явно, то устанавливается в зависимости от значения nls_lang. Его можно задать явно для сессии командой:
alter session set nls_date_format = "dd.mm.yyyy"
сессии для этого потребуются права "alter sesssion".
В случае использования "alter session" приложение становится менее требовательным к настройке клиента, его будет легче помирить другими приложениями (один нужна маска dd.mm.yyyy, другим yyyy/mm/dd) и заодно вам не потребуется объяснять всем заказчикам, что именно и где надо прописать в реестре.
> select * from tab
> where to_char(data1,"DD.MM.YYYY")="01.10.2002"
>
> только в данном случает про индекс по полю data1(если такой
> есть) придется забыть
Зачем же, лучше так, чтобы про индекс не забывать
select * from tab
where data1 = to_date("01.10.2002","DD.MM.YYYY")
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c