DB2 / IDAA: как правильно отформатировать VARCHAR в TIMESTAMP за миллисекунды - PullRequest
1 голос
/ 26 июня 2019

Я использую IDAA для DB2. В какой-то момент я использую TO_DATE для преобразования некоторых дат, и это работает:

TO_DATE('09/03/2018 06:49:23','MM/DD/YYYY HH:MI:SS')

Но когда у меня есть значение VARCHAR с миллисекундами в метке времени, TO_DATE возвращает ошибку. Я посмотрел в Интернете и нашел ответ, который говорит, что использовать TO_TIMESTAMP, но это не работает:

TO_TIMESTAMP('09/03/2018 06:49:23.443000','MM/DD/YYYY HH:MI:SS.NNNNNN')

Я посмотрел каждый ответ здесь и перепробовал множество вариантов. Я пробовал каждую комбинацию функций TO_TIMESTAMP, TO_DATE, TIMESTAMP_FORMAT и формат для миллисекунд как FF, FF6, NNNNNN. Я получаю эти ошибки:

NO AUTHORIZED FUNCTION NAMED TO_TIMESTAMP HAVING COMPATIBLE ARGUMENTS WAS FOUND. SQLCODE=-440

SQL error: SQLCODE = -904, SQLSTATE = 57011, SQLERRMC = Invalid Date.. SQLCODE=-904

Может быть, для ИДАА все по-другому? Я не знаю.

Я использую DB2 для z / OS V11 с использованием IBM Data Studio 4.1.3.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

На основании следующей ссылки - https://www.ibm.com/support/knowledgecenter/en/SS4LQ8_4.1.0/com.ibm.datatools.aqt.doc/gui/concepts/c_idaa_inconsistencies.html

IBM Db2 Analytics Accelerator для z / OS не поддерживает все форматы даты и времени, которые поддерживает Db2. Это может привести к различным результатам для ускоренных и внутренних запросов Db2, если используется скалярная функция VARCHAR_FORMAT или TIMESTAMP_FORMAT. Следующие форматы не поддерживаются IBM Db2 Analytics Accelerator для z / OS:

FF[n] - fractional seconds (000000-999999)

The optional number n is used to specify the number of digits to include in the return value. Valid values for n are the integers from 1-6. The default is 6.
ID - ISO day of the week (1-7)

The value 1 represents Monday. The value 7 represents Sunday.
IYYY - ISO year (0000-9999)

The last four digits of the year based on the ISO week that is returned.
NNNNNN - microseconds (000000-999999)

This format is equivalent to FF6.
RR - last two digits of the year (00-99)
SSSSS - seconds since the previous midnight
0 голосов
/ 27 июня 2019

TIMESTAMP_FORMAT для Db2 для z / OS задокументировано здесь

https://www.ibm.com/support/knowledgecenter/en/SSEPEK_12.0.0/sqlref/src/tpc/db2z_bif_timestampformat.html

Обратите внимание, что HH совпадает с HH12, а не HH24, поэтомуВозможно, вам понадобится, например,

$ db2 "values TIMESTAMP_FORMAT('09/03/2018 16:49:23','MM/DD/YYYY HH24:MI:SS')"

1                         
--------------------------
2018-09-03-16.49.23.000000

  1 record(s) selected.

(Выше приведено в Db2 LUW, но я бы предположил, что функция работает на Db2 для z / OS / и DAA одинаково)

...