Как сравнить даты в сценарии SQL для базы данных прогресса? - PullRequest
0 голосов
/ 03 июня 2019

В нашей базе данных прогресса есть поле DATETIME-TZ, поэтому пример данных - «23/05/2019 12: 11: 16.099» - мне нужна помощь, чтобы сравнить даты в этом поле с Оператор выбора SQL

В редакторе процедур выполнения я могу легко сравнивать даты, например

выберите дату (облигация-номер) с того места, где дата (облигация-номер) <= сегодня </p>

Это прекрасно работает, но мне нужно получить эту информацию через sql для веб-страницы и просто получить сообщение об ошибке, даже если разбить поле на подстроку и создать резервную копию даты, похоже, не работает

ВЫБРАТЬ дату ("" облигация-нет "") ОТ и ГДЕ дата ("" облигация-нет "") <= Дата () </p>

Пробовал варианты вышеупомянутых, и это тоже ...

ДАТА (SUBSTRING ( "" связь-нет "", 4,2), SUBSTRING ( "" связь-нет "", 1,2), SUBSTRING ( "" связь-нет "", 7,4))

Это должно вернуть только даты раньше, чем сегодня, но просто получить неверный синтаксис старого сообщения, так что я что-то упустил где-то

[DataDirect] [Драйвер ODBC Progress OpenEdge Wire Protocol] [OPENEDGE] Синтаксическая ошибка в операторе SQL на уровне или около ") ОТ ГДЕ" (10713)

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Использование редактора SQL в PDSOE, который использует JDBC для поля datetime (no -tz):

SELECT "bond-no" FROM pub.accadd WHERE "bond-no" <= CURDATE()

Чтобы использовать статическую дату:

SELECT "bond-no" FROM pub.accadd WHERE "bond-no" <= TO_DATE('5/31/2019')

Или:

SELECT "bond-no" FROM pub.accadd WHERE "bond-no" <= { d'5/31/2019' }
0 голосов
/ 03 июня 2019

Вам нужно заключить в кавычки имя поля, потому что оно содержит тире, но ваш пример кода содержит двойные кавычки.Вы пробовали:

SELECT date("bond-no") FROM accadd WHERE date("bond-no") <= Date()

Я не уверен, почему вы это делаете, но я не думаю, что вам нужна функция DATE () вокруг "bond-no".DATE () - это функция 4gl, поэтому она работает, когда вы находитесь в «редакторе процедур» и используете встроенный SQL, но движок OpenEdge SQL92 не имеет функции DATE ().Однако есть функция TO_DATE (): https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dmsrf%2Fto-date.html%23wwID0EXIOS

Следующее работает с базой данных sports2000 и использует sqlexp (вместо встроенного sql в редакторе процедур):

select * from pub.order where orderdate < '1/1/1999'

Я также добавил поле datetime-tz под названием "tstamp", инициализировал его и попробовал так:

select tstamp from pub.order where tstamp < '1/1/1999'

, который тоже работал нормально.

...