Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

Снова SQL   Найти похожие ветки 

 
glow ©   (2003-09-23 10:15) [0]

Мастера, подскажите пожалуйста.
В запросе можно ли написать что-нибудь типа
......(G - EXTRACT(YEAR FROM A.DATR)<= 26....
где G - заданный год(например, 1998) А.DATR - дата рождения, вобщем определить возраст не болше 26


 
Johnmen ©   (2003-09-23 10:22) [1]

Можно, if (IB>=6.0) or (IB in [FB,YA])
:)))


 
glow ©   (2003-09-23 10:30) [2]


> Можно, if (IB>=6.0) or (IB in [FB,YA])
> :)))

?:)?:)


 
Плохиш_   (2003-09-23 10:41) [3]

>glow

Про SQL почитать не пробовал?


 
Johnmen ©   (2003-09-23 10:43) [4]

:)
Перевожу:
Если версия IB сервера не младше 6.0 или сервер представлен клоном IB, таким, как FireBird или Yaffil.


 
glow ©   (2003-09-23 10:48) [5]


> Если версия IB сервера не младше 6.0 или сервер представлен
> клоном IB, таким, как FireBird или Yaffil.

Спасибо за разъяснения:))
Человек, всего несколько дней изучает SQL, а вы тут загадками пишите:((


 
Johnmen ©   (2003-09-23 10:57) [6]

>...несколько дней изучает SQL...

Какой SQL ? SQL вообще ? Тогда вопрос неуместен.
Какой-либо конкретный диалект SQLя ? Тогда уместен, если указывать тип СУБД, версию и т.п.
:)
А еще можно самому пробовать...


 
Плохиш_   (2003-09-23 11:04) [7]

>Johnmen © (23.09.03 10:57) [6]


> А еще можно самому пробовать...


Я плякал :"(


 
clickmaker ©   (2003-09-23 13:25) [8]

if (G - datepart(year, A.YEAR)) <= 26


 
glow ©   (2003-09-23 14:17) [9]


> Johnmen © (23.09.03 10:57) [6]

Paradox7, D5
Вычислить возраст в запросе вообще реально или нет (если не IB и не)FireBird или Yaffil


 
Sandman25 ©   (2003-09-23 15:51) [10]

[9] glow © (23.09.03 14:17)

Да все реально даже для Paradox. В крайнем случае из date("1.1."||G) вычитаешь DATR, получаешь разницу в днях. Затем делишь ее на 365


 
glow ©   (2003-09-23 15:59) [11]


> Затем делишь ее на 365

А как быть с високосными годами?


 
Johnmen ©   (2003-09-23 16:00) [12]

>glow ©

Если требуется "количество полных лет", когда говорят о возрасте, то точно никак не получишь.
Приблизительно - как ты писал.
Еще точнее, но тоже приблизительно - Sandman25 © (23.09.03 15:51).


 
glow ©   (2003-09-23 16:09) [13]


> Еще точнее, но тоже приблизительно - Sandman25 © (23.09.03
> 15:51).

примерно так (((StrToDate("1.1."||G)-A.DATR)/365)<=26)


 
glow ©   (2003-09-25 12:30) [14]


> Sandman25 © (23.09.03 15:51) [10]
> [9] glow © (23.09.03 14:17)
>
> Да все реально даже для Paradox. В крайнем случае из date("1.1."||G)
> вычитаешь DATR, получаешь разницу в днях. Затем делишь ее
> на 365

не работает, также как и ......(G - EXTRACT(YEAR FROM A.DATR)<= 26....


 
Sandman25 ©   (2003-09-25 12:40) [15]

Что значит "не работает"? Поподробнее можно?

Вот такой запрос на моей базе работает
select * from trn_docum where (("1.1."||2003)-bank_date)/365 < 1
и выдает все данные, начиная с 2002 года


 
MsGuns ©   (2003-09-25 12:52) [16]

>glow © (25.09.03 12:30) [14]
>не работает, также как и ......(G - EXTRACT(YEAR FROM A.DATR)<= 26....

И не должна работать. Может, надо
..(G - EXTRACT(YEAR FROM A.DATR) )<= 26....


 
glow ©   (2003-09-25 12:53) [17]


> Вот такой запрос на моей базе работает

Какая база?
Пишу тот же запрос только ||G вместо 2003 - Capability not supported


 
glow ©   (2003-09-25 13:01) [18]


> И не должна работать. Может, надо
> ..(G - EXTRACT(YEAR FROM A.DATR))<= 26....

ответ

> Если версия IB сервера не младше 6.0 или сервер представлен
> клоном IB, таким, как FireBird или Yaffil.

А то что скобки не хватает это опечатка


 
Sandman25 ©   (2003-09-25 13:02) [19]

Informix.
G - это поле в таблице? Или имя параметра? Если второе, то вместо него вставьте его значение:

Query. Sql.Text := "select * from trn_docum where (("1.1."||"
+ IntToStr(G)+")-bank_date)/365 < 1")


 
glow ©   (2003-09-25 13:06) [20]


> IntToStr(G)+

Такой вариант тоже был
Видимо прав

> Johnmen © (23.09.03 10:43) [4]


 
Sandman25 ©   (2003-09-25 13:12) [21]

[20] glow © (25.09.03 13:06)

Если у Вас работает [15], то сработает и [19]. Это же один и тот же запрос :)


 
glow ©   (2003-09-25 13:20) [22]


> [15]

тоже не работает, но ошибка другая "Type mismatch expression"


 
Sandman25 ©   (2003-09-25 13:29) [23]

>тоже не работает, но ошибка другая "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)


 
Johnmen ©   (2003-09-25 13:45) [24]

select * from trn_docum where (cast("1.1.2003" as date)-bank_date)/365 < 1


 
glow ©   (2003-09-25 13:48) [25]


> Возможно, cast("1.1."||2003 as date)

Возможно, но остальное испробовано


 
glow ©   (2003-09-26 11:22) [26]

Пишу ((cast("1.1.+IntToStr(G)" as date)-A.DATR)/365 <26) -Capability not supported


 
Johnmen ©   (2003-09-26 11:41) [27]

>glow ©

Как с тобой тяжело :(
Можешь ты наконец отделить DELPHI и его функции от SQL команды ?


 
glow ©   (2003-09-26 11:43) [28]

Если тяжело можно не отвечать. Зачем раздражаться?


 
glow ©   (2003-09-26 11:55) [29]


> Можешь ты наконец отделить 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


 
Johnmen ©   (2003-09-26 12:13) [30]

>glow ©

Я не раздражался. Меня вообще очень сложно раздразить...:)))

>По вашему этот запрос должен работать в D5 Paradox?

По-моему, должен. А проверить никак ? =)


 
glow ©   (2003-09-26 12:22) [31]


> По-моему, должен. А проверить никак ? =)

Естественно проверено!!!
Вопрос то был конкретный
> glow © (23.09.03 10:15)

если так нельзя, тогда как
> Sandman25 © (23.09.03 15:51) [10]
пишет что можно, но ни один из предложенных вариантов не подходит?
P.S.
Кстати, слова раздразить в рус.языке нет:))


 
glow ©   (2003-09-26 12:50) [32]


> ("1.1.2003" as date)-

Работает с ("1.2.2003" as date), вместо 2003 надо переменную или параметр (G),
но никак не могу то ли G правильно преобразовать, то ли кавычки расставить


 
Sandman25 ©   (2003-09-26 12:51) [33]

Слушай, 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:57) [34]

Ура!!! Работает!!!
((cast(""1.1." + IntToStr(G) + """ as date)-A.DATR)/365 <26)
Огромное спасибо ВСЕМ, кто принял участие в обсуждении:))

Те, кому вопрос показался ламерским, надеюсь хоть посмеялись от души.


 
Sandman25 ©   (2003-09-26 12:59) [35]

Ух, наконец-то :)


 
glow ©   (2003-09-26 13:01) [36]

Слушай Sandman,запрос (cast("1.1.2002" as date) - d1)/365<0
даже не компилируется. Так что напрасно трудился над Paradox4 :)))


 
glow ©   (2003-09-26 13:02) [37]


> Ух, наконец-то :)

Хоть кто-то рад кроме меня:)))


 
Sandman25 ©   (2003-09-26 13:12) [38]

[36] glow © (26.09.03 13:01)

Я не знаю, что ты там делаешь в своей программе, поэтому для проверки советов лучше используй SQL Explorer, входящий в поставку Delphi.


 
Sandman25 ©   (2003-09-29 15:18) [39]

glow

Я тут еще немного о скорости подумал. Все неправильно :)
На самом деле надо запрос преобразовать к виду
select * from dat where datr > cast("1.1.2002" as date)
Тогда будет индекс использоваться, соответственно скрость очень сидьно возрастет.
"select * from dat where datr > cast(""1.1." + IntToStr(G) + """ as date)"



Страницы: 1 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.017 c
8-65562
Denwill
2003-06-17 12:28
2003.10.20
Как работать с двумя формами в OpenGL?


4-65682
Aleksandr
2003-08-01 17:11
2003.10.20
Объясните мне работу с TEvent ... и WaitForSingleObject


1-65481
нет
2003-10-08 17:21
2003.10.20
Экспорт в Эксель когда его нет


7-65655
JohnJ
2003-08-03 01:33
2003.10.20
телефон подключён к модему...


1-65548
Alibaba
2003-10-07 17:36
2003.10.20
Разные версии