SQL (в базе данных Progress) - Дата - Ошибка 7481 - Несогласованные типы

Использование SQL в базе данных прогресса (SQL92)

Использование программного обеспечения (разработанного для Pervasive), которое позволяет писать отчеты и т. Д., Которые можно отправлять пользователям по электронной почте.

Я получаю следующую ошибку с моим SQL:

Отладка SQL: [DataDirect] [драйвер ODBC PROGRESS] [PROGRESS] Несогласованные типы (7481)

Следующий код отлично работает:

Select * FROM pub."stockmaster"
Where ("sm-sold" = 0 OR ("sm-sold" = 1 AND "sm-selldate" >= '2017-06-01'))

Проблема (ошибка) возникает, когда я использую встроенные «переменные» программного обеспечения, такие как @MONTHSTART@, который отображается как «01 июня 2017 года».

Select * FROM pub."stockmaster"
Where ("sm-sold" = 0 OR ("sm-sold" = 1 AND "sm-selldate" >= @MONTHSTART@))

Мне нужно использовать эту «Системную переменную», чтобы мне не приходилось каждый месяц вручную менять дату SQL.

Поле "sm-selldate" отформатировано как тип «Дата в процессе».

Эти системные переменные отлично работают с всеобъемлющей базой данных.

Я просмотрел пару форумов и увидел предложения по CONVERT(DATETIME,, но без рабочего решения


person modhorat    schedule 12.06.2017    source источник
comment
Версия Прогресса? Всегда полезно включить это, поскольку поведение могло измениться.   -  person Jensd    schedule 12.06.2017
comment
ПРОГРЕСС Версия 9.1E0422, OpenEdge Release 10.2B08   -  person modhorat    schedule 12.06.2017


Ответы (1)


Ой, 9.1E - древний ...

Возможно, на это подействует комбинация CURDATE, TO_CHAR и TO_DATE?

Я не использую SQL для OpenEdge, поэтому я не могу это проверить.

TO_DATE(TO_CHAR(MONTH(CURDATE()) + "/1/" + TO_CHAR(YEAR(CURDATE()))

Мое намерение состоит в том, чтобы строка в TO_DATE преобразовывалась во что-то вроде

'6/1/2017'

(Первое июня 2017 г.).

Вот документация для 9.1E SQL-92:

https://community.progress.com/community_groups/openedge_general/w/openedgegeneral/1777.9-1e-sql-92-guide-and-reference

person Jensd    schedule 12.06.2017
comment
Он принимает даты (а точнее строки) в формате 'YYYY-MM-DD', по ссылке: documentation.progress.com вместо этого показывает MM из MONTH - person modhorat; 12.06.2017
comment
Изменить это было бы несложно. TO_DATE(TO_CHAR(YEAR(CURDATE()) + "-" + TO_CHAR(MONTH(CURDATE()))? Однако: вы ссылаетесь на версию 11.7 документации. Он был выпущен в апреле 2017 года. Ваша версия (согласно вашему комментарию) - 9.1 - она ​​была выпущена в 2004 году и удалена в 2015 году - все вполне могло измениться. - person Jensd; 12.06.2017
comment
Вот что в итоге сработало: '@YEAR@' + '-' + '@MONTH@' + '-' + '01' Спасибо за помощь. - person modhorat; 13.06.2017