Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];

Вниз

Как правильно написать дату в запросе?   Найти похожие ветки 

 
coba   (2003-02-07 15:58) [0]

Уважаемые мастреа, как правильно в SQL запросе написать дату??
просто
Select *
From Table
WHERE date="01.01.2003" не проходит, говорит тип не соответствует... как строку перевести в DateTime?
Динамически в запрос подставлять ничего не нужно...


 
Danilka   (2003-02-07 16:03) [1]

попробуй вот так:
WHERE date="01.01.2003"


 
Max Zyuzin   (2003-02-07 16:04) [2]

Работать с датой как с датой, через параметр
Select *
From Table
WHERE Table."date"= :mydate
И дальше Query.ParamByName("mydate").AsDate := now;

ЗЫ Советую не называть поля и таблицы зарезервироваными словами (date)


 
iZEN   (2003-02-07 16:09) [3]

Проблемы с локализацией возможны.
Можно применять универсальный формат: "dd-mmm-yyyy"
(01-JAN-2003).
Лучше всё досконально протестировать в разных локалях, например на строке: "29-FEB-2003" и "29.02.2003" и т.д., а то приложение сможет работать только в России...


 
coba   (2003-02-07 16:12) [4]

Danilka © (07.02.03 16:03)
не работает

Max Zyuzin © (07.02.03 16:04)

пример который я написал - просто пример...
Динамически ничего формировать не нужно, т.е. один раз в статический запрос нужно написать дату и все... можно конечно посмотреть как выглядит дата в числовом виде, т.е например 01.12.2002 это 37561 в формате DateTime, но мне интересно как правильно написать дату в запросе...


 
coba   (2003-02-07 16:15) [5]

iZEN ©
Вот я и спрашиваю чем преобразовать строку в дату...
В MSSQL это Cast, в dbase я не знаю... нет под руками справки...


 
Max Zyuzin   (2003-02-07 16:17) [6]

>coba (07.02.03 16:12)
Параметром.


 
coba   (2003-02-07 16:23) [7]

Max Zyuzin ©
Параметром нехочется...

Пока написал в лоб... т.е. дату в формате даты :)


 
Max Zyuzin   (2003-02-07 16:25) [8]

>coba (07.02.03 16:23)
Дело в том, что у тебя с таким подходом программа будет зависить от настроек OS какой формат там стоит такой тебе и надо писать запрос, в общем это фигово :) т.к. на разных тачках может и не работать (из за того что я и написал).


 
coba   (2003-02-07 16:32) [9]

Max Zyuzin ©
Все гораздо проще :)
я всего-лишь перекачиваю нужные данные из старой базы в MSSQL
Программа будет работать только у меня...


 
Max Zyuzin   (2003-02-07 16:33) [10]

>coba (07.02.03 16:32)
Так ты запрос к какой базе делаешь? К фокспровой или к MSSQL???


 
coba   (2003-02-07 16:35) [11]

Max Zyuzin ©
К фоксовой конечно...
С MSSQL у меня проблем нет...


 
sniknik   (2003-02-07 16:37) [12]

coba (07.02.03 16:35)
если даты передаеш не параметром, то будут. не у тебя так у клиентов.


 
Max Zyuzin   (2003-02-07 16:39) [13]

>coba (07.02.03 16:35)
Тады сделай такую штуку...
Label1.Caption := DateToStr(now);
И в таком виде и забивай дату в запросе


 
Danilka   (2003-02-07 16:39) [14]

в начале программы делаешь вот так:
ShortDateFormat:="dd.mm.yyyy";

только, все это как-то некрасиво...


 
coba   (2003-02-07 16:39) [15]

sniknik ©
У клиентов точно не будут...
Потому как пользоваться программой буду только я...


 
sniknik   (2003-02-07 16:39) [16]

извини не заметил
> Программа будет работать только у меня...
тогда без разницы, настройки наверняка одинаковые ставиш даже если винды переинсталируеш.


 
coba   (2003-02-07 16:46) [17]

Danilka ©
Неработает...
дело не в том какая дата dd.mm.yyyy или mm.dd.yyyy или еще какая,
дело в том что не хочет он строку принимать, говорит тип не тот... если число подставить к примеру 37561 (01.11.2002) то все нормально...


 
Max Zyuzin   (2003-02-07 16:49) [18]

>coba (07.02.03 16:46)
Max Zyuzin © (07.02.03 16:39) - что на это выдает?


 
coba   (2003-02-07 16:52) [19]

Max Zyuzin ©
Я сейчас делаю примерно это... работает нормально , но кроме запроса в программе я смотрю вообще что в базе лежит, соответственно пишу запросы, смотрю где сколько мусора и т.д...
поэтому так работать не прикольно ,все время ручками дату конвертировать а потом ее в запросе использовать...


 
coba   (2003-02-07 16:59) [20]

Max Zyuzin ©
Вернее я не совсем так делаю... я беру str(StrToDate(Now):10:0)и пожставляю то что получилось...


 
coba   (2003-02-07 17:00) [21]

Max Zyuzin ©
Совсем зарапортовался...
str(StrToDate("01.01.2003"):10:0)


 
Max Zyuzin   (2003-02-07 17:03) [22]

>coba (07.02.03 16:52)
Я тебе это написал только для того, что бы ты узнал как у тебя на компьютере дата сделоана, в смысле какой у нее формат, а запросы ты уже будешь делать используя этот формат. Все же что у тебя выдает?


 
sniknik   (2003-02-07 17:06) [23]

так не пробовал?
SELECT * FROM DATYEAR WHERE DAT = "31.12.2003 "


 
sniknik   (2003-02-07 17:08) [24]

в хелпе так написано.


 
Reals   (2003-02-07 17:16) [25]

Можно еще так попробовать:
Select *
From Table
WHERE date=CONVERT(datetime, "01.01.2003")


 
coba   (2003-02-07 17:18) [26]

sniknik ©
пробовал - не работает...


 
coba   (2003-02-07 17:24) [27]

Reals ©
Говорит что не знает функцию CONVERT


 
sniknik   (2003-02-07 17:30) [28]

ну м не менее перебери варианты. (зависит от настроек твоей машины, модет день и месяц поменять)

хелп

Example of a date literal in a US format:
SELECT *
FROM Orders
WHERE (SaleDate <= "1/23/1998")

Example of the same date literal in a European format:
SELECT *
FROM Orders
WHERE (SaleDate <= "23.1.1998")
Leading zeros for the month and day fields are optional.
If the century is not specified for the year in a date value, the BDE settings FOURDIGITYEAR and YEARBIASED control the century of the date.


 
sniknik   (2003-02-07 17:32) [29]

coba (07.02.03 17:24)
в локал SQL CAST заместо

хелп

SELECT SaleDate,
SUBSTRING(CAST(CAST(SaleDate AS DATE) AS CHAR(10)) FROM 1 FOR 1)
FROM Orders



 
coba   (2003-02-07 17:42) [30]

sniknik ©
fox Cast не понимает...
стрингу брать не хочет... короче ну его ...
пусть ест сконвертрованные вручную даты...


 
coba   (2003-02-07 17:52) [31]

Max Zyuzin ©
дата на компе у меня dd.mm.yyyy, дело не в формате представления даты и времени а в том, почему в запрос нельзя просто поставить дату, обязательно нужно подставлять ее в формате datetime...
сорри за задержку...


 
coba   (2003-02-07 17:55) [32]

Ладно, всем спасибо за ответы, ну его этот фокс вместе с дбейсом...


 
sniknik   (2003-02-07 17:56) [33]

> fox Cast не понимает

хочеш сказать что все время про фокс говорил? то есть не из дельфей а из фокса проверяеш? !!!!!!

ну, ну а где это в вопросе стоит? тебе все отвечают по дельфям Local SQL.


 
sniknik   (2003-02-07 18:04) [34]

в ФОКСЕ формат дат {23/1/1998} (американский)


 
coba   (2003-02-07 18:06) [35]

sniknik ©
Я из дельфей запросы делаю...
На сколько я понимаю, какие SQL команды поддерживает СУБД, те команды и проходят...
фокс не понимает CAST, в запросе который я вставляю из дельфи, на CAST реакция отрицательная...


 
sniknik   (2003-02-07 18:20) [36]

ты что думаеш SQL он один на всех? наивный.
и дельфи подключается по разному и к разным драйверам. и в зависимости от драйвера/способа все может 1000 раз поменятся. а вот этой важной инфы ты не предоставил, в результате никакого результата.

где ты пишеш о своей СУБД? и драйвере. А то может только я не заметил.


 
coba   (2003-02-07 18:27) [37]

sniknik ©
СУБД и версия дельфи указаны в названии топика...
Как правильно написать дату в запросе? [D5, dBase, FoxPro]


 
sniknik   (2003-02-07 18:42) [38]

и первым же ответом, был правильный

Danilka © (07.02.03 16:03)
попробуй вот так:
WHERE date="01.01.2003"

для локал SQL (BDE) еще раз повторюсь, для ADO + Jet или ODBC - VFoxpro - MSdBase - .... для когото может быть неправильно. (ADO это тоже не последний способ)

результат вместо конкретного описания, бессмысленная полемика. если у тебя Local SQL то и первый вариант прошол бы (ну может день и месяц поменял бы) и CAST работал бы.
Значит чтото другое, или обманываеш.


 
coba   (2003-02-07 18:49) [39]

sniknik ©
Нет, я сперва попробовал по всякому, а потом на форум полез...
Простой стринг не проходит - говорит тип данных не тот, если поставить "01.01.2003" тоже не проходит...
проходит только если дату поставить в ее нормальном виде, т.е. к примеру 37561...


 
sniknik   (2003-02-07 18:52) [40]

а хотя бы что говорит, ошибку, мог привести?



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

Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.007 c
1-87449
nomshar
2003-02-18 18:34
2003.02.27
Обработка события у динамически созданного компонента


3-87343
Толян
2003-02-11 09:45
2003.02.27
Кодировка


9-87238
KA_
2002-09-19 13:08
2003.02.27
Двумерный векторный движок


6-87603
MystiX
2003-01-06 13:13
2003.02.27
DownLoad


3-87348
avch
2003-02-11 11:38
2003.02.27
Функция SQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский