Форум: "Базы";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
ВнизСнова 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.006 c