powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2+timestamp
17 сообщений из 17, страница 1 из 1
db2+timestamp
    #34731116
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установленна db2 8.1.
Имеется таблица с полем типа TIMESTAMP.
Представление идет в формате даты, каким образом перегнать это значение в формат милисекунд?
...
Рейтинг: 0 / 0
db2+timestamp
    #34732361
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код:
select MICROSECOND(timestampfield) from tablename
...
Рейтинг: 0 / 0
db2+timestamp
    #34732366
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
select MICROSECOND(timestampfield) from tablename
...
Рейтинг: 0 / 0
db2+timestamp
    #34732446
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно, я не правильно изъянился. Мне необходимо получить время в формате unix из имеющего штампа дб2.
...
Рейтинг: 0 / 0
db2+timestamp
    #34732679
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pilat_Наверно, я не правильно изъянился. Мне необходимо получить время в формате unix из имеющего штампа дб2.Пусть
Код: plaintext
VALUES CURRENT TIMESTAMP
выдает значение
2007-08-16-15.04.22.687000
В каком именно формате вы хотите представить этот timestamp?
...
Рейтинг: 0 / 0
db2+timestamp
    #34732715
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pilat_Наверно, я не правильно изъянился. Мне необходимо получить время в формате unix из имеющего штампа дб2.
Может кто и помнит ещё, что такое "время юникс" :)
Я - уже нет.

Огласите, к какому именно формату вам надо преобразовать timestamp.
...
Рейтинг: 0 / 0
db2+timestamp
    #34733317
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это?
Код: plaintext
VALUES(TIMESTAMPDIFF( 2 , CHAR(CURRENT TIMESTAMP - TIMESTAMP('1970-01-01-00.00.00.00'))))
...
Рейтинг: 0 / 0
db2+timestamp
    #34733339
авыпаыа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
время в юникс это сколко секунд прошло с начала 1970-го года
...
Рейтинг: 0 / 0
db2+timestamp
    #34735189
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Alexey Popov
Вы абсолютно правы, это я и искал.

2авыпаыа
Поправка - "миллисекунд".
...
Рейтинг: 0 / 0
db2+timestamp
    #34735234
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Однако, либо я уже совсем плохой стал, либо....
Выборка из таблицы
Код: plaintext
1.
values(TIMESTAMPDIFF( 2 ,CHAR(CURRENT TIMESTAMP - TIMESTAMP('1970-01-01-00.00.00.00'))),CURRENT TIMESTAMP)
Результат выборки (1-й ст - время в секундах, 2-й - штамп дб2)
Код: plaintext
1.
2.
3.
 1                                 2                          
-----------       --------------------------
  1186423465        2007 - 08 - 17 - 18 . 04 . 25 . 742000 

Далее помещаю значение первого столбца в жава код
Код: plaintext
1.
new Date(1186423465000L) = Mon Aug  06   18 : 04 : 25  GMT  2007 

Внимание вопрос. Почему появляется разница в днях?
...
Рейтинг: 0 / 0
db2+timestamp
    #34737511
GolemXIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из-за совершенно нетривиального поведения TIMESTAMPDIFF.
В полном году 365 дней, а в полном месяце 30.
9 дней в високосных годах, + 2 за этот год (31+31+31+31-28).
...
Рейтинг: 0 / 0
db2+timestamp
    #34737735
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pilat_Установленна db2 8.1.
Имеется таблица с полем типа TIMESTAMP.
Представление идет в формате даты, каким образом перегнать это значение в формат милисекунд?Можно написать маленькую функцию на java:

1. Скомпилируйте ява-файл:
--- Misc.java ---
public class Misc {
public static long timestamp2long(java.sql.Timestamp ts) {return ts.getTime();}
}
--- Misc.java end ---

батником вида (путь к sqllib поставьте свой):

--- make.bat ---
set DB2PATH="C:\PROGRAM FILES\IBM\SQLLIB"
set JDK_PATH=%DB2PATH%\java\jdk
set LIBS=%DB2PATH%\java
%JDK_PATH%\bin\javac -extdirs %LIBS% %1
--- make.bat end ---

т.е. выполните:
make.bat Misc.java

2. Поместите Misc.class в каталог %DB2PATH%\Function на сервере.

3. Зарегистрируйте функцию:
---
create function timestamp2bigint(ts timestamp)
RETURNS bigint
LANGUAGE Java
EXTERNAL NAME 'Misc.timestamp2long'
FENCED THREADSAFE
NO SQL
NOT NULL CALL
NO EXTERNAL ACTION
DISALLOW PARALLEL
PARAMETER STYLE java;
---

4. Вызовите ее:
values timestamp2bigint(timestamp('2007-08-17-18.04.25.742000'))
...
Рейтинг: 0 / 0
db2+timestamp
    #34837648
Pilat_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Создал и скомпилил жава файл Timestamp4DB2.java
Код: plaintext
1.
2.
3.
4.
5.
public class Timestamp4DB2 {
	public static long timestamp2long(java.sql.Timestamp ts) {
		return ts.getTime();
	}
}
Компиляция
Код: plaintext
1.
javac Timestamp4DB2.java

2. Скопировал Timestamp4DB2.class в C:\Program Files\IBM\SQLLIB\FUNCTION\

3. Зарегил функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create function timestamp2bigint(ts timestamp)
RETURNS bigint
LANGUAGE Java
EXTERNAL NAME 'Timestamp4DB2.timestamp2long'
FENCED THREADSAFE
NO SQL
NOT NULL CALL
NO EXTERNAL ACTION
DISALLOW PARALLEL
PARAMETER STYLE java;

4. Выполнил функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
values timestamp2bigint(timestamp('2007-08-17-18.04.25.742000'))

 1                    
--------------------
SQL4304N  Хранимая процедура или определенная пользователем функция Java 
"PILAT.TIMESTAMP2BIGINT", уникальное имя "SQL071001110113400" не могут 
загрузить класс Java "Timestamp4DB2", код причины "1".  SQLSTATE= 42724 

SQL4304N  Хранимая процедура или определенная пользователем функция Java "PILAT.TIMESTAMP2BIGINT", уникальное имя "SQL071001110113400" не могут загрузить класс Java "Timestamp4DB2", код причины "1             ".
...
Рейтинг: 0 / 0
db2+timestamp
    #34839642
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код:
1.
values((DAYS(CURRENT TIMESTAMP) - DAYS('1970-01-01')) * 86400 + (MIDNIGHT_SECONDS(CURRENT TIMESTAMP - CURRENT TIMEZONE)))
...
Рейтинг: 0 / 0
db2+timestamp
    #34845458
dmatsynin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пилат, как то странно, у тебя в коде timestamp2long, а из db2 ты вызываешь timestamp2bigint?
...
Рейтинг: 0 / 0
db2+timestamp
    #34847256
dmatsynin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Пилат, согласен, затупил :)
В общем у меня все работает, функцию скомпилил и все работает.
А у меня такой вопрос, от IBM'a есть такая штука - DeveloperWorkbench. Собственно она служит для создания хранимок и прочего. А вот почему там нельзя создать функцию на жаве? Вот хранимку можно, а функцию нельзя? Пришлось ручками делать.
...
Рейтинг: 0 / 0
db2+timestamp
    #34864472
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustaccio
Код: plaintext
values((DAYS(CURRENT TIMESTAMP) - DAYS('1970-01-01')) *  86400  + (MIDNIGHT_SECONDS(CURRENT TIMESTAMP - CURRENT TIMEZONE)))


Ошибочка вышла, кстати. Должно быть
Код: plaintext
values((DAYS(CURRENT TIMESTAMP - CURRENT TIMEZONE) - DAYS('1970-01-01')) *  86400  + (MIDNIGHT_SECONDS(CURRENT TIMESTAMP - CURRENT TIMEZONE)))
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2+timestamp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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