C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
DATE_ISH BETWEEN 12.10.2004 AND 11.11.2004, Как правильно задать промежутки?
jeka_t
Отправлено: 11.11.2004, 18:37


Не зарегистрирован







Я хотел бы выбрать данные из таблицы в заданном промежутке.
Тип данных у меня: дд.мм.гггг — DateTime
Но при выполнении запроса пишет: "Число содержит синтаксическую ошибку..."
Я думаю, что SQL не понимает точки-разделители в строке...
Помогите решить проблему, пожалуйста...
Gedeon
Отправлено: 11.11.2004, 19:19


Ветеран

Группа: Модератор
Сообщений: 1742



Во первых пишите какой базой данных пользуетесь.
Во вторых форамт указания даты зависит от 1 и в одном сервере БД может их быть сколько угодно, вот кусок из TSQL Help
QUOTE

Numeric Date Format
Microsoft® SQL Server™ 2000 allows you to specify date data with a numeric month specified. For example, 5/20/97 represents the twentieth day of May, 1997. When using numeric date format, specify the month, day, and year in a string with slash marks (/), hyphens (-), or periods (.) as separators. This string must appear in the following form:

number separator number separator number [time] [time]

These numeric formats are valid:

[0]4/15/[19]96 -- (mdy)
[0]4-15-[19]96 -- (mdy)
[0]4.15.[19]96 -- (mdy)
[04]/[19]96/15 -- (myd)

15/[0]4/[19]96 -- (dmy)
15/[19]96/[0]4 -- (dym)
[19]96/15/[0]4 -- (ydm)
[19]96/[04]/15 -- (ymd)

When the language is set to us_english, the default order for the date is mdy. You can change the date order with the SET DATEFORMAT statement, which can also affect the date order, depending on the language.

The setting for SET DATEFORMAT determines how date values are interpreted. If the order does not match the setting, the values are not interpreted as dates (because they are out of range), or the values are misinterpreted. For example, 12/10/08 can be interpreted as one of six dates, depending on the DATEFORMAT setting.


Это только числовые форматы, есть еще строковые и т.д.
Это касается SQLServer, кроме указанных дату можно еще в куче форматов показывать, есть куча функций для работы с ней, вот например как установить нужный формат и сделать выборку
SQL
SET DATEFORMAT mdy -- тут ставим формат
GO
SELECT * FROM MyTable WHERE Date_Table BETWEEN '10.22.2004' AND '10.23.2004'


Как-то конкретнее вопрос задайте, ато вообще не понятно чего Вы хотите.

Отредактировано Gedeon — 11/11/2004, 20:25
jeka_t
Отправлено: 11.11.2004, 20:05


Не зарегистрирован







У меня есть таблица1 ADO
в ней есть поле1 типа Data формата дд.мм.гггг ([0]4.15.[19]96)
Я хочу создать запрос, который бы отбирал записи по этому полу в промежутке...
я писал:
[CODE]Select * from Outgoing where Data_ish BETWEEN '11.11.2004' AND '11.11.2004'[CODE]
И так тоже писал:
[CODE]Select * from Outgoing where Data_ish BETWEEN 11.11.2004 AND 11.11.2004[CODE]
Но так SQL пишет синтакс. ошибки..
Не могу понять почу?
Если написать [CODE]Select * from Outgoing where Data_ish BETWEEN 11/11/2004 AND 11/11/2004[CODE],
то ошибки нет, но записей тоже не отбирает, так как в таблице разделители стоят точки...
Так нужно ставить сначало SET DATEFORMAT mdy GO... ???
AVC
Отправлено: 12.11.2004, 09:30


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
У меня есть таблица1 ADO

ADO это не база данных а средство связи. Пока не скажите с какой бд работаете конкретного ответа не получите.
jeka_t
Отправлено: 12.11.2004, 09:48


Не зарегистрирован







Ну если движёк ADO, то наверное, база подходит лишь Microsoft Access, (*.mdb), или я не прав, или спомощью ADO можно подключать и *.dbf, *,db и так далее...
Короче у меня база Microsoft Access 2000 (*.mdb)
И потом, какая разница в формате базы, у меня запрос не получается в SQL....
jeka_t
Отправлено: 12.11.2004, 09:58


Не зарегистрирован







Попробую задать вопрос по другому:
SELECT * FROM MyTable WHERE Date_Table BETWEEN '10.22.2004' AND '10.23.2004' — запрос для формата поля STRING
SELECT * FROM MyTable WHERE Date_Table BETWEEN 2004 AND 2004 — запрос для формата поля INTEGER
Разница в ковычках (заметно да?)
Мне нужен запрос формата поля DateTime, потому что в первом случае он пишет не соответствие формата поля (String не DateTime), а во втором (если указать 11.11.2004) — то пишет синтаксическую ошибку, так как Int не может быть с точкой...
Надеюсь вопрос стал более понятней...
Извените...
AVC
Отправлено: 12.11.2004, 10:22


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
Ну если движёк ADO, то наверное, база подходит лишь Microsoft Access ... или я не прав

Вы не правы. Через ADO можно зацепить любую БД (если не напрямую, то через ODBC.

QUOTE
И потом, какая разница в формате базы, у меня запрос не получается в SQL....

В SQL вы пишите текст, который должен разбираться сервером БД, а это значит, что надо учитывать особенности его синтаксиса.

В Access'е константа типа дата выглядит так #dd.mm.yyyy# порядок внутри решеток зависит от национальных настроек. Или можно покопать в сторону Format(или как-то так — функция Access) для явного преодразования к дате.

jeka_t
Отправлено: 12.11.2004, 10:54


Не зарегистрирован







Значит надо писать так:
SELECT * FROM MyTable WHERE Date_Table BETWEEN #10.22.2004# AND #10.23.2004#????

jeka_t
Отправлено: 12.11.2004, 11:22


Не зарегистрирован







Спасибо, AVC!
Просто по настоящему дельный совет!
У меня вышел запрос!
Он такой:
SELECT * FROM MyTable WHERE Date_Table BETWEEN #11/11/2004# AND #11/11/2004#
Да очень выжным окозалcя символ #
Супер...
Ещё раз благодарен вам!
avc*
Отправлено: 12.11.2004, 11:41


Не зарегистрирован







На здоровье. Заходите еще. smile.gif

Вернуться в Работа с базами данных в C++Builder