Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в запросе получить разность дат? / 25 сообщений из 36, страница 1 из 2
14.10.2010, 12:56
    #36899114
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
Нужно узнать сколько секунд прошло с даты, хранящейся в поле таблицы.
Вот такая конструкция не работает, возвращает 0 строк.
Код: plaintext
1.
SELECT DATEDIFF('ss',UPDSTMP,GETDATE()) FROM VOUHDR
Проблема, как я понимаю, в разных типах: GETDATE() - это %Timestamp, а UPDSTMP - это на самом деле %Date.
С конвертацией типов тоже ничего не срослось пока, вот так опять же 0 строк:
Код: plaintext
1.
SELECT {fn CONVERT(UPDSTMP,SQL_TIMESTAMP)} FROM VOUHDR
...
Рейтинг: 0 / 0
14.10.2010, 13:02
    #36899139
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
CAST работает, но толку нет.
...
Рейтинг: 0 / 0
14.10.2010, 13:19
    #36899200
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8Нужно узнать сколько секунд прошло с даты, хранящейся в поле таблицы.
Какие значения хранятся в том поле? Сравнивать с текущей датой?
...
Рейтинг: 0 / 0
14.10.2010, 13:55
    #36899323
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8 , например такое вот

Код: plaintext
1.
SELECT DISTINCT DATEDIFF('ss','1999-01-01 00:00:00',CURRENT_TIMESTAMP)
FROM Sample.Person

таки работает...
...
Рейтинг: 0 / 0
14.10.2010, 14:00
    #36899340
Как в запросе получить разность дат?
Странно, datediff очень толерантно относится к представлению входных дат.

Код: plaintext
1.
2.
-- +$h = 62013 (14/10/2010) 
SELECT datediff('ss',  62013 , {fn now}) _now, datediff('ss',  62013 , getdate()) _getdate
#_now_getdate14615646156

Может какая-то беда в данных?
...
Рейтинг: 0 / 0
14.10.2010, 14:09
    #36899370
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
krvsa,

а у меня не работает :(
что-то не так с этим полем, по которому сравниваем (UPDSTMP оно называется у меня)
имеет тип %Date, на вид выглядит примерно так: 2009-09-01 10:49:30.0
Вообще это прилинкованная таблица из Оракла, если это чем-то поможет.
...
Рейтинг: 0 / 0
14.10.2010, 15:22
    #36899603
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8на вид выглядит примерно так: 2009-09-01 10:49:30.0
Прям как тиместамп... А сам пример (мой) в семплс работает?
...
Рейтинг: 0 / 0
14.10.2010, 15:33
    #36899639
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
krvsacoder1cv8на вид выглядит примерно так: 2009-09-01 10:49:30.0
Прям как тиместамп... А сам пример (мой) в семплс работает?
Ага, Ваш пример работает...
...
Рейтинг: 0 / 0
14.10.2010, 15:38
    #36899651
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8что-то не так с этим полем, по которому сравниваем (UPDSTMP оно называется у меня)
имеет тип %Date, на вид выглядит примерно так: 2009-09-01 10:49:30.0
Вообще это прилинкованная таблица из Оракла, если это чем-то поможет.
Попробуйте вручную изменить тип данных в классе Cache, сгенерированном для этой таблицы, с %Date на %TimeStamp и перекомпилировать класс.
...
Рейтинг: 0 / 0
14.10.2010, 15:59
    #36899738
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
Turk,

Перекомпилировал класс с указанием типа поля %TimeStamp
Запрос
Код: plaintext
1.
SELECT DISTINCT DATEDIFF('ss',UPDSTMP,CURRENT_TIMESTAMP) FROM VOUHDR
все равно не работает!
Если просто посмотреть таблицу, то записи с датой в этом поле я так же вижу.
...
Рейтинг: 0 / 0
14.10.2010, 16:22
    #36899819
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
UPDSTMP смотрите в логическом представлении?
...
Рейтинг: 0 / 0
14.10.2010, 16:24
    #36899826
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
что будет в
Код: plaintext
SELECT UPDSTMP,string(UPDSTMP),DATEDIFF('ss',UPDSTMP,CURRENT_TIMESTAMP), DATEDIFF('ss',string(UPDSTMP),CURRENT_TIMESTAMP) FROM VOUHDR
...
Рейтинг: 0 / 0
14.10.2010, 16:59
    #36899920
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
Блок А.Н.UPDSTMP смотрите в логическом представлении?
Смотрел в ODBC, в логическом будет так: 2009-09-01 10:49:30
Блок А.Н.что будет в
Код: plaintext
SELECT UPDSTMP,string(UPDSTMP),DATEDIFF('ss',UPDSTMP,CURRENT_TIMESTAMP), DATEDIFF('ss',string(UPDSTMP),CURRENT_TIMESTAMP) FROM VOUHDR

будет 0 записей. Использование DATEDIFF в любом виде дает пустой результат запроса. Как сейчас заметил, такой запрос тоже пустой результат возвращает:
Код: plaintext
1.
SELECT string(UPDSTMP) FROM VOUHDR
...
Рейтинг: 0 / 0
14.10.2010, 17:27
    #36899995
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8будет 0 записей. Использование DATEDIFF в любом виде дает пустой результат запроса. Как сейчас заметил, такой запрос тоже пустой результат возвращает:
Код: plaintext
1.
SELECT string(UPDSTMP) FROM VOUHDR

Надеюсь, такой запрос:
Код: plaintext
1.
SELECT * FROM VOUHDR
вернет записи? Если да, то что будет в поле UPDSTMP? Если нет, то попробуйте выполнить этот же запрос с помощью внешней программы, напрямую подключившись к ODBC.
...
Рейтинг: 0 / 0
14.10.2010, 17:38
    #36900036
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
Turk
Надеюсь, такой запрос:
Код: plaintext
1.
SELECT * FROM VOUHDR
вернет записи? Если да, то что будет в поле UPDSTMP? Если нет, то попробуйте выполнить этот же запрос с помощью внешней программы, напрямую подключившись к ODBC.
Да, я же говорю, что просто если UPDSTMP смотреть, то оно выводится без проблем. Что будет в UPDSTMP, я писал выше, если Logical Mode то 2009-09-01 10:49:30
...
Рейтинг: 0 / 0
14.10.2010, 19:08
    #36900227
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
Нет, все-таки погодите.
0 записей скорее всего потому, что происходит ошибка. Какой SQLCODE?

Что дадут запросы:
SELECT string(UPDSTMP) FROM VOUHDR

select DATEDIFF('ss',string(UPDSTMP),CURRENT_TIMESTAMP) from VOUHDR
...
Рейтинг: 0 / 0
15.10.2010, 09:19
    #36900678
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
Блок А.Н.Нет, все-таки погодите.
0 записей скорее всего потому, что происходит ошибка. Какой SQLCODE?

Что дадут запросы:
SELECT string(UPDSTMP) FROM VOUHDR

select DATEDIFF('ss',string(UPDSTMP),CURRENT_TIMESTAMP) from VOUHDR
Окей :) Отвечаю подробно.
Первый запрос: SQLCODE: 100 Количество строк: 0
Второй запрос: SQLCODE: 100 Количество строк: 0

А вот так:
[src]
select UPDSTMP from VOUHDR
[src]
все работает на ура.
# UPDSTMP
1 2009-09-01 10:49:30
2 2009-09-01 10:50:39
3 2009-09-01 11:52:32
4 2009-09-01 12:08:09
5 2009-09-01 12:10:55
...
Рейтинг: 0 / 0
15.10.2010, 09:42
    #36900695
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8Вообще это прилинкованная таблица из Оракла, если это чем-то поможет.
Вы пытаетесь использовать SQL-функции Caché в БД Oracle. При работе с прилинкованной таблицей действует синтаксис той СУБД, к которой она относится.
В СУБД Oracle нет функции DATEDIFF, поэтому Ваш запрос не работает.
Попробуйте поискать решение в соседней ветке.
...
Рейтинг: 0 / 0
15.10.2010, 10:11
    #36900730
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
servit,

вот как.... Спасибо ) А я-то думал это какое-то... эм... представление таблицы в Каше, судя по тому что для нее Persistent класс создается с типами Каше. А тут оказывается все по-другому.
Осталось разобраться как эта задача в Oracle решается )
...
Рейтинг: 0 / 0
15.10.2010, 10:43
    #36900806
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8А я-то думал это какое-то... эм... представление таблицы в Каше, судя по тому что для нее Persistent класс создается с типами Каше.
Представление внешней таблицы в Caché может быть осуществлено с помощью:
1) связывание (линкования) таблицы;
2) миграции таблицы, включая структуру и данные.

Во втором случае данные хранятся непосредственно в Caché, поэтому Вы можете использовать возможности Caché SQL в полном объёме.
Использование Caché SQL Шлюза
...
Рейтинг: 0 / 0
15.10.2010, 10:50
    #36900820
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
servit,

ага, понятно ) спасибо еще раз за разъяснения.

ЗЫ: не поддается все-таки пока мне разность дат, в оракловом синтаксисе работает, но возвращает не совсем понятно что )
Код: plaintext
1.
select (sysdate-UPDSTMP)* 24 * 60 * 60  as sec from VOUHDR
9109 7:26:20.371200000
9064 7:26:20.371200000
...
Рейтинг: 0 / 0
15.10.2010, 11:47
    #36901008
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8в оракловом синтаксисе работает, но возвращает не совсем понятно что )

Что-то мне подсказывает что это

Количество дней время9109 7:26:20.371200000 9064 7:26:20.371200000
...
Рейтинг: 0 / 0
15.10.2010, 12:07
    #36901075
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
krvsa
Что-то мне подсказывает что это

Количество дней время9109 7:26:20.371200000 9064 7:26:20.371200000
Не ) Это кол-во секунд (то что мне нужно) + какое-то не понятное время...
Код: plaintext
1.
select UPDSTMP, sysdate as currentDate ,(sysdate-UPDSTMP)* 24 * 60 * 60  as sec
UPDSTMP currentDate sec2010-10-15 08:19:02 2010-10-15 11.56.29.724071000 4:0 13047 17:22:39.734400000 2010-10-15 08:19:47 2010-10-15 11.56.29.724071000 4:0 13002 17:22:39.734400000
Вот такие пироги. Я бы получал нормальное время в секундах при обходе RecordSet-a (так как функции Каше у нас в этом запросе не доступны), но проблема в том, что мне нужен отбор по этой разности, т.е. к примеру, записи за последние 30 сек.
...
Рейтинг: 0 / 0
15.10.2010, 12:13
    #36901094
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
coder1cv8 , в любом слечае наверное нужно ораклистов теребить...
...
Рейтинг: 0 / 0
15.10.2010, 17:04
    #36902053
coder1cv8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить разность дат?
krvsa,

А что их теребить? В Оракле запрос:
Код: plaintext
1.
SELECT (sysdate-UPDSTMP)* 24 * 60 * 60  FROM VOUHDR
работает! И возвращает кол-во секунд без всяких выкрутасов. Проблема в Каше.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как в запросе получить разность дат? / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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