2015-09-02 2 views
0

ОК, я использую GET DATA для извлечения данных с использованием ODBC-соединения. Я собираюсь использовать производственный объект, чтобы многократно автоматизировать тянуть данные, и я бы хотел сделать это с начала года.Ошибка в GET DATA SQL query function

В настоящее время, в том числе это часть SQL подкоманде я манипулировать, чтобы изменить диапазон дат:

between '09/03/2014 12:00:00 AM' and '09/02/2015 11:59:59 PM' 

До сих пор я получил эту работу тот же:

between '09/03/2015 12:00:00 AM' and CURDATE() + ' 11:59:59 PM' 

Тем не менее, я собираюсь настроить, чтобы я работал, поэтому мне нужно, чтобы он заканчивался в начале предыдущего дня. Таким образом, это будет выглядеть следующим образом:

between {fn CONVERT({ fn DATE_SUB({ fn CURDATE()}, INTERVAL 365 DAY) }, SQL_CHAR) } + ' 12:00:00 AM' and {fn CONVERT({ fn DATE_SUB({ fn CURDATE()}, INTERVAL 1 DAY) }, SQL_CHAR) } + ' 11:59:59 PM' 

Ошибка я получаю это говорит:

SQLExecDirect не удалось: [Microsoft] [ODBC SQL Server Driver] [SQL Server] Неправильный синтаксис около " 365' .

Я не могу для жизни меня выяснить, как форматировать 365 по-разному. Если у меня есть дата, введенная для начала диапазона дат, я получаю ту же ошибку для «1» в конце.

EDIT: обновление, поэтому вопрос задан, если это MySQL или SQL Server (мои извинения, у меня мало опыта и я не знал разницы изначально). Тем не менее, это похоже на пару способов.

Как вы можете видеть в приведенной выше ошибке, она ссылается на сервер Microsoft SQL Server. Кроме того, документация из SPSS (программа, в которой я работаю) ссылается на this MS site на использование функций, но они кажутся mysql.

Кроме того, когда я использую эту версию скрипта (используя SQL-серверные функции), я получаю сообщение об ошибке, говорящее, что GetDate не является признанной функцией. Если я переключу его на CURDATE(), то проблема DATADD().

{fn CONVERT({ fn DATEADD(day,-1,{ fn GETDATE() }) }, SQL_CHAR) } + ' 12:00:00 AM' and {fn CONVERT({ fn DATEADD(year,-01,{ fn GETDATE() }) }, SQL_CHAR) } + ' 11:59:59 PM' 

Если я отсечь фигурные скобки, и такие, и придерживаться функций SQL сервера, это дает мне ошибку для некорректного синтаксиса около «»

CONVERT(DATEADD(year,-1,GETDATE()), SQL_CHAR) + ' 12:00:00 AM' and CONVERT(DATEADD(day,-1,GETDATE()), SQL_CHAR) + ' 11:59:59 PM' 
+0

это mysql или sql-сервер? выглядит как sql-server ... отредактируйте пост – BK435

ответ

0

Я думаю, что вы пытаетесь машап между mysql и MS SQL Server. В принципе, DATE_SUB - это функция MYSQL, но вы, похоже, используете ее против MS SQL Server.

Что вы должны использовать, если я понимаю вашу рабочую среду: http://www.w3schools.com/sql/func_dateadd.asp с отрицательным значением.

PS - зачем использовать 365 дней, когда вы можете использовать 1 год (и таким образом високосные годы не станут проблемой в долгосрочной перспективе).

Надеюсь, это поможет!

+0

Затем, если CURDATE() работает, вы, вероятно, подключаетесь к MYSQL. Не могли бы вы рассказать нам, какую базу данных вы используете? ваш пост указывает на MYSQL и MSSQL. Благодаря! –

+0

кажется SQL-сервером. – JYurkovich

+0

Давайте попробуем как можно больше упростить и посмотреть, работает ли он. Вместо того, чтобы между x и y try> date_sub (now(), interval 1 YEAR) - результаты должны быть похожими.Теперь() также включает время, поэтому вам не нужно больше использовать конвертер –