Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
14-65579
Anatoly Podgoretsky
2003-10-02 13:17
2003.10.20
Подробности по мылу


9-65306
justYura
2003-04-01 12:22
2003.10.20
Animation


14-65632
Шишкин Илья
2003-09-30 19:48
2003.10.20
Помогите проверить адрес


1-65431
romeo
2003-10-07 17:38
2003.10.20
Можно ли получить значение свойства по его имени?


1-65447
MadGhost
2003-10-07 14:03
2003.10.20
Помогите с TTreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский