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 |
|
Не зарегистрирован
|
На здоровье. Заходите еще. |
|