-
lower=lcase upper=ucase
А как будут выглядеть типа substring, cast, replace и прочие, если они имеются?
-
Будет зависеть от провайдера(или драйвера для ODBC провайдера)
-
Provider=MSDASQL;Persist Security Info=False;Data Source=Файлы dBASE;Initial Catalog=путь к файлам Настройки ODBC по умолчанию, ничего в них не меняла.
-
Тогда смотрите доку по dBase... Например, определение позиции подстроки в строке будет AT(Substr, Str), вырезать подстроку Substr(str, Позиция[, Кол-во символов]) и т.д.(ltrim, rtrim, atrim)
-
Попробовала Substr(str, Позиция[, Кол-во символов]) - запрос говорит, что неопределенная функция в строке. Про str я знаю, проходит. А вот cast как будет выглядеть (из символов в дату, например)? BDE+dbase - функции это одно. А где смотреть ODBC +dbase?
-
> Раиса (07.05.2009 14:02:04) [4]
Это все потому, что то цепочка длинная {ODBC/JET/BDE(родное)}, с потерей части ДНК
-
> А где смотреть ODBC +dbase? есть очень большая вероятность, что в jet (access). зависит от версии. для однозначности надо бы сменить провайдера.
-
Но все-таки хочется написать в запросе: cast, substring, replace, разница между датами в днях... А если полностью задача, то: определить список лиц, дни рождения которых приходятся в период с ... по ... и ADO+dbf...
-
А как сменить провайдера на чужом компе? И кто это позволит?
-
> Но все-таки хочется написать в запросе: ... хочется так напиши. а вот когда возникнет желание чтобы еще и работало...
> определить список лиц, дни рождения которых приходятся в период с ... по ... и ADO+dbf... чтобы выбрать период нет никакой необходимости в указанных функциях, вообще в запросе не нужно ничего считать, просто определить 2 параметра и задавать их значения перед открытием.
> А как сменить провайдера на чужом компе? И кто это позволит? не на компе и не инетовского... а используемого в твоей программе. для коннекта. почитай про ADO где нибудь...
-
Все же я не представляю, как будет выглядеть запрос (чтобы и работал) о днях рождениях, если в файле дата рождения в виде даты с годом, а надо выбрать всех, у кого дни рождения в период с 29.12 по 05.01, например.... Помогите, пожалуйста...
-
> Раиса (07.05.2009 14:27:10) [10]
Вообще то не представляю такой запрос, BETWEEN не проходит, и очень хорошо что ты привела именно такой формат, очень наглядно. Для MS SQL и других серверов, которые работают с Юлианской датой еще представляю, но с некоторой ошибкой на стыке лет.
-
> а надо выбрать всех, у кого дни рождения в период с 29.12 > по 05.01, например....
Filtered + OnFilterRecord ?
-
> у кого дни рождения в период с 29.12 по 05.01 это уже не период, а куча периодов по одному на год
примерно так (только без гарантий на на все провайдеры кроме jet) SELECT * FROM Table1 WHERE DateSerial(1000, Month(Date), Day(Date)) BETWEEN :Start AND :End
и задавать нужно в пределах года, если так как у тебя начало в одном конец в другом то нужно либо 2 условия либо 2 запроса. понятно почему думаю. (кстати 1000 это високосный год? вроде да, но если нет то нужно взять високосный)
-
Извините, я еду к врачу, поэтому вернусь часа через 4...
Игорь Шевченко © (07.05.09 14:52) [12] А поподробнее... Что в фильтре? И хотелось бы запросом...
-
> Раиса (07.05.2009 15:02:14) [14]
Одним запросом не получится и нужен анализ на клиентской стороне и создание динамического запроса.
if End >= Start then один еlse первый запрос объединение второй запрос Первый запрос до 31.12.2004 и второй запрос начиная c 1.01.2004, при переформатирование дат с заменой года на константу, например 2004, SQL диалект должен позволять разделять дату на составляющие и обратное складывание, хотя бы в текстовый формат YYYYMMDD
Это при условии, что делается только запросами без применения серверных решений.
-
> Раиса (07.05.2009 15:02:14) [14]
Фильтр видимо не пойдет, а вот OnFilterRecord вполне, с учетом выше сказано про переход через год
-
> с учетом выше сказано про переход через год
можно и без перехода, отсеять в фильтре тех, у кого дата рождения с 02.05 до 28.12 - в остатке получатся нужные персоны.
-
А надо в промежутках от 28.21 по 31.12 и от 01.01 по конец.
Вот поэтому и два запроса и объединение (частный случай один запрос). Ну или тоже самое в OnFilterRecord, но уже по всему массиву данных.
Я задачу решал через JulianDay в это Дельфи DayOfYear, не путать с JulianDate, хотя и через нее можно решать, но у меня в СУБД не было поддержки, только JulianDay - оно чем удобно, что не надо самому преобразовывать в количество дней с 1 января любого года. Расчет очень простой. Мне как раз нужен был интервал в 16 дней. Нужен только анализ на один или два запроса.
-
Anatoly Podgoretsky © (07.05.09 16:24) [18]
Я подобную задачу решал, но у меня было условие, чтобы начальная дата не превышала конечную (месяц+день), одним запросом, но на оракле - он умеет с датами вытворять кучу преобразований.
|