![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова SQL
glow © (2003-09-23 10:15:00)
Мастера, подскажите пожалуйста.
В запросе можно ли написать что-нибудь типа
......(G - EXTRACT(YEAR FROM A.DATR)<= 26....
где G - заданный год(например, 1998) А.DATR - дата рождения, вобщем определить возраст не болше 26
Sandman25 (2003-09-29 15:18:00) [1]
glow
Я тут еще немного о скорости подумал. Все неправильно :)
На самом деле надо запрос преобразовать к виду
select * from dat where datr > cast("1.1.2002" as date)
Тогда будет индекс использоваться, соответственно скрость очень сидьно возрастет.
"select * from dat where datr > cast(""1.1." + IntToStr(G) + """ as date)"
Sandman25 (2003-09-26 13:12:00) [2]
[36] glow © (26.09.03 13:01)
Я не знаю, что ты там делаешь в своей программе, поэтому для проверки советов лучше используй SQL Explorer, входящий в поставку Delphi.
glow (2003-09-26 13:02:00) [3]
> Ух, наконец-то :)
Хоть кто-то рад кроме меня:)))
glow (2003-09-26 13:01:00) [4]
Слушай Sandman,запрос (cast("1.1.2002" as date) - d1)/365<0
даже не компилируется. Так что напрасно трудился над Paradox4 :)))
Sandman25 (2003-09-26 12:59:00) [5]
Ух, наконец-то :)
glow (2003-09-26 12:57:00) [6]
Ура!!! Работает!!!
((cast(""1.1." + IntToStr(G) + """ as date)-A.DATR)/365 <26)
Огромное спасибо ВСЕМ, кто принял участие в обсуждении:))
Те, кому вопрос показался ламерским, надеюсь хоть посмеялись от души.
Sandman25 (2003-09-26 12:51:00) [7]
Слушай, glow. Это мое последнее сообщение, адресованное тебе, уж извини.
Я только что сделал в Paradox 4 таблицу dat c одним полем d1 типа date,
заполнил таблицу 3 датами (26.03.2002, 25.04.2003, 23.02.2001) и затем выполнил запрос
select * from dat where (cast("1.1.2002" as date) - d1)/365<0
В результате мне вернуло две записи, кроме 23.02.2001.
И не надо мне говорить, что в Paradox 5 это не будет работать.
Я затем конвертировал таблицу к Paradox 7 и запрос все еще работал.
glow (2003-09-26 12:50:00) [8]
> ("1.1.2003" as date)-
Работает с ("1.2.2003" as date), вместо 2003 надо переменную или параметр (G),
но никак не могу то ли G правильно преобразовать, то ли кавычки расставить
glow (2003-09-26 12:22:00) [9]
> По-моему, должен. А проверить никак ? =)
Естественно проверено!!!
Вопрос то был конкретный
> glow © (23.09.03 10:15)
если так нельзя, тогда как
> Sandman25 © (23.09.03 15:51) [10]
пишет что можно, но ни один из предложенных вариантов не подходит?
P.S.
Кстати, слова раздразить в рус.языке нет:))
Johnmen (2003-09-26 12:13:00) [10]
>glow ©
Я не раздражался. Меня вообще очень сложно раздразить...:)))
>По вашему этот запрос должен работать в D5 Paradox?
По-моему, должен. А проверить никак ? =)
glow (2003-09-26 11:55:00) [11]
> Можешь ты наконец отделить DELPHI и его функции от SQL команды
> ?
По вашему этот запрос должен работать в D5 Paradox?
> Johnmen © (25.09.03 13:45) [24]
> select * from trn_docum where (cast("1.1.2003" as date)-bank_date)/365
> < 1
glow (2003-09-26 11:43:00) [12]
Если тяжело можно не отвечать. Зачем раздражаться?
Johnmen (2003-09-26 11:41:00) [13]
>glow ©
Как с тобой тяжело :(
Можешь ты наконец отделить DELPHI и его функции от SQL команды ?
glow (2003-09-26 11:22:00) [14]
Пишу ((cast("1.1.+IntToStr(G)" as date)-A.DATR)/365 <26) -Capability not supported
glow (2003-09-25 13:48:00) [15]
> Возможно, cast("1.1."||2003 as date)
Возможно, но остальное испробовано
Johnmen (2003-09-25 13:45:00) [16]
select * from trn_docum where (cast("1.1.2003" as date)-bank_date)/365 < 1
Sandman25 (2003-09-25 13:29:00) [17]
>тоже не работает, но ошибка другая "Type mismatch expression"
Это хорошо, только почему раньше об этом не писали.
Надо привести ("1.1."||2003) к типу date.
Например
select * from trn_docum where (date("1.1."||2003)-bank_date)/365 < 1
На Informix это работает. Если у Вас не сработает, ищи способ приведения для Вашей СУБД. Возможно, cast("1.1."||2003 as date)
glow (2003-09-25 13:20:00) [18]
> [15]
тоже не работает, но ошибка другая "Type mismatch expression"
Sandman25 (2003-09-25 13:12:00) [19]
[20] glow © (25.09.03 13:06)
Если у Вас работает [15], то сработает и [19]. Это же один и тот же запрос :)
glow (2003-09-25 13:06:00) [20]
> IntToStr(G)+
Такой вариант тоже был
Видимо прав
> Johnmen © (23.09.03 10:43) [4]