Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Снова SQL


Страницы:   1 2

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]


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо