powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в запросе получить разность дат?
11 сообщений из 36, страница 2 из 2
Как в запросе получить разность дат?
    #36902080
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, не проще ли так:
- написать хранимку в Оракле
- вызывать ее из Cache через SQL-шлюз.
Подход, проверенный временем :), и безопасность выше.
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36902104
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov,

не проще )
"база на Оракл" это часть внешней системы, к которой я доступа не имею, по большему счету.
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36902428
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно...
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36902816
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
coder1cv8В Оракле запрос:
Код: plaintext
1.
SELECT (sysdate-UPDSTMP)* 24 * 60 * 60  FROM VOUHDR
работает! И возвращает кол-во секунд без всяких выкрутасов. Проблема в Каше.
А что возвращает этот же запрос при использовании внешней программы (ODBCView, SQLExplorer и т.п.)? Если возвращает то же, что и при выполнении из Оракла, то действительно проблема в Cache. Если же возвращает "плохой" (не устраивающий вас) результат, то Cache здесь не при чем.
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36904608
hooligun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прочитал топик - пробовали пользовать to_date(переменная, 'YYYY-MM-DD')?
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36904805
HooliGUN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hooligunпрочитал топик - пробовали пользовать to_date(переменная, 'YYYY-MM-DD')?

вот так SELECT DATEDIFF('ss',UPDSTMP,to_date(GETDATE(), 'YYYY-MM-DD')) FROM VOUHDR

to_date вернет данные %Date
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36904996
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HooliGUN,

DATEDIFF нет в Oracle )

Вроде разобрался! Проблема была в разных типах текущей даты и поля с датой из таблицы (наверное).
Вот так работает:
Код: plaintext
SELECT CAST((CURRENT_DATE-UPDSTMP)* 60 * 60 * 24  AS INTEGER) AS sec FROM VOUHDR

Но теперь есть другая проблема. Вот вроде бы выяснили, что если таблица линкованная то нужно писать запрос на sql-диалекте той базы к которой линкуем. Но почему функции (в данном случае Оракла) работают выборочно?? Например, TO_DATE доступна:
Код: plaintext
SELECT TO_DATE('2010-10-18','YYYY-MM-DD') AS sec FROM VOUHDR
а TRUNC уже нет:
Код: plaintext
SELECT TRUNC(CURRENT_DATE,'DAY') FROM VOUHDR
ОШИБКА #5540: SQLCODE: -359 Сообщение: Пользовательская SQL-функция 'SQLUSER.TRUNC' не существует
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36905020
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, to_date() есть в оракле.
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36905749
HooliGUN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
coder1cv8HooliGUN,

DATEDIFF нет в Oracle )

Вроде разобрался! Проблема была в разных типах текущей даты и поля с датой из таблицы (наверное).
Вот так работает:
Код: plaintext
SELECT CAST((CURRENT_DATE-UPDSTMP)* 60 * 60 * 24  AS INTEGER) AS sec FROM VOUHDR

Но теперь есть другая проблема. Вот вроде бы выяснили, что если таблица линкованная то нужно писать запрос на sql-диалекте той базы к которой линкуем. Но почему функции (в данном случае Оракла) работают выборочно?? Например, TO_DATE доступна:
Код: plaintext
SELECT TO_DATE('2010-10-18','YYYY-MM-DD') AS sec FROM VOUHDR
а TRUNC уже нет:
Код: plaintext
SELECT TRUNC(CURRENT_DATE,'DAY') FROM VOUHDR
ОШИБКА #5540: SQLCODE: -359 Сообщение: Пользовательская SQL-функция 'SQLUSER.TRUNC' не существует

должно работать SELECT {fn TRUNCATE(CURRENT_DATE,'DAY')} FROM VOUHDR
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36906758
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8,

Если с помощью связанной таблицы не удаётся получить нужный результат, есть возможность программно выполнить нужный Вам SQL-код, используя Java-Шлюз.
Например:
Пример
Class oracle.test Extends %RegisteredObject
{
ClassMethod Test(host As %String = "127.0.0.1",port As %Integer = {$$$JDBCGatewayPort}) As %Status
{
  #dim exception As %Exception.StatusException
  set url="jdbc:oracle:thin:@oracleserver:oracleport:scott"
  set username="логин"
  set password="пароль"
  #dim classPath As %ListOfDataTypes=##class(%ListOfDataTypes).%New()
  ; каталог с jar-файлами драйвера Oracle
  do classPath.Insert("C:\JDBC\Oracle\")
  try {
    #dim gateway As %Net.Remote.Gateway=##class(%Net.Remote.Gateway).%New()
    ; подключаемся к шлюзу
    $$$TOE(status,gateway.%Connect(host,port,,,classPath))
    $$$TOE(status,gateway.%ClassForName("oracle.jdbc.OracleDriver"))

    #dim connection As java.sql.Connection=##class(java.sql.DriverManager).getConnection(gateway,url,username,password)
    #dim statement As java.sql.Statement=connection.createStatement()
    #dim rs As java.sql.ResultSet=statement.executeQuery("select ID,UPDSTMP,(SYSDATE-UPDSTMP)*24*60*60 from VOUHDR")
    #dim rsMetaData As java.sql.ResultSetMetaData=rs.getMetaData()
    write !,"Выполнение запроса",!
    write "==============================================",!
    for i=1:1:rsMetaData.getColumnCount() write rsMetaData.getColumnName(i),?$x+10

    write !,"----------------------------------------------",!
    while (rs.next()) {
      for i=1:1:rsMetaData.getColumnCount() write rs.getString(i),?$x+10
    }
    write !,"----------------------------------------------",!

    $$$TOE(status,gateway.%Disconnect())
  } catch exception {
    ; выводим текст ошибки на русском языке
    write $system.Status.GetErrorText(exception.AsStatus(),"ru")
  }
}
}

Программное использование JDBCGateway
...
Рейтинг: 0 / 0
Как в запросе получить разность дат?
    #36906917
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем!
{fn TRUNCATE(CURRENT_DATE,'DAY')} - работает.

Отдельное спасибо за пример с Java-шлюзом )
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в запросе получить разность дат?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]