Главная страница
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]

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


 
coba   (2003-02-07 19:07) [41]

sniknik ©
Я вроде сказал, говорит что тип не тот что нужен...


 
AM   (2003-02-07 19:22) [42]

Я честно говоря не знаю какие типы полей есть у dBase, но например у MSSQL есть типы полей связанные с датой:
1)datetime
2)smalldatetime
ну и еще есть там
3)timestamp (но это не в счет)

Если у dBase тоже есть такие типы, попробуй поварьируй измени тип поля у таблицы (предварительно конечно зарезервируй БД).
Просто все что тебе посоветовали, хоть один должен прокатить.


 
Anatoly Podgoretsky ©   (2003-02-07 19:34) [43]

А может у тебя вообще поле не типа Date, ты смотрел в Database Desktop?

И давай точное сообщение об ошибке, а вроде бы мало подходит.
Ответственнее надо относиться к вопросу в форуме или ты просто, чтобы посмеяться?


 
coba   (2003-02-07 19:37) [44]

Anatoly Podgoretsky © ,AM
Поле типа DATE

кроме как datetime ничего признавать не хочет, сама (как в MSSQL) в datetime не конвертирут, короче бог с ней... я уже забил почти на траблу...


 
sniknik ©   (2003-02-07 21:32) [45]

трабла с тобой, если у всех работает а у тебя нет, и единственное что от тебя слышиш "не работает" без всяких подробностей (может уже доперло? работает, но не признаешся по причине дебильности ошибки?).

хотя если действительно ради прикола ....



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

Текущий архив: 2003.02.27;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.014 c
8-87577
Анат
2002-11-10 19:04
2003.02.27
Курсоры


3-87247
ROk
2003-02-11 10:53
2003.02.27
Индикация индексирования


14-87678
Zhenka
2003-02-10 19:39
2003.02.27
Что значит эта надпИсь


1-87544
smok_er
2003-02-15 15:47
2003.02.27
Работа c TFileStream


14-87623
vajo
2003-02-10 10:20
2003.02.27
Oracle 8, SQL Server 2000