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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.019 c
6-87591
Chak
2003-01-09 16:46
2003.02.27
Скорость CONNECTa


3-87307
Pk
2003-02-10 11:45
2003.02.27
Динамическое создание вычисляемого поля


14-87712
Rustiik
2003-02-12 10:58
2003.02.27
Архивация БД


14-87628
Dudko Anton
2003-02-10 05:39
2003.02.27
Pascal


14-87642
Начинающий
2003-02-10 01:54
2003.02.27
Inno Setup