Когда я загружаю данные из файла в базу данных db2 для типа данных timestamp, содержащего только часть даты, db2 автоматически добавит в него детали времени - PullRequest
0 голосов
/ 11 октября 2019

Когда я загружаю данные из файла в базу данных db2 для типа данных отметки времени, содержащего только часть даты, db2 автоматически добавит в него сведения о времени.

У меня был файл только с форматом даты. Данные по-прежнему загружены, но при запросе данных также есть временная часть по умолчанию, например, 22.10.1969, 00: 00.000000? Это по умолчанию?

1 Ответ

0 голосов
/ 14 октября 2019

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

db2 "describe values current date" 

 Column Information

 Number of columns: 1

 SQL type              Type length  Column name                     Name length
 --------------------  -----------  ------------------------------  -----------
 384   DATE                     10  1                                         1

против

db2 "describe values current timestamp" 

 Column Information

 Number of columns: 1

 SQL type              Type length  Column name                     Name length
 --------------------  -----------  ------------------------------  -----------
 392   TIMESTAMP                26  1                                         1

Вы можете даже побитно проверять фактическую структуру с помощью функции HEX():

db2 "values hex(date(current timestamp))"

1       
--------
20191013

db2 "values hex(timestamp(current timestamp))"

1                   
--------------------
20191013090443204348

В зависимости от используемой утилиты, Db2 будет неявно приводить значенияк цели TIMESTAMP. С помощью LOAD вы можете просмотреть документацию для метки времени , чтобы увидеть, какие форматы будут приняты по умолчанию.

Предполагая Db2 LUW, я сделал быстрый тест с:

db2 "create table timestamp_load_test(c1 int, c2 timestamp)"
echo "1,2019-10-13-09.00.00.000000" >> data.del
echo "2,2019-10-13-09.00.00"        >> data.del
echo "3,2019-10-13-09.00"           >> data.del
echo "4,2019-10-13"                 >> data.del

db2 "load from data.del of del replace into timestamp_load_test nonrecoverable"
...
SQL0180N  The syntax of the string representation of a datetime value is 
incorrect.  SQLSTATE=22007
SQL3185W  The previous error occurred while processing data from row "F0-3" of 
the input file.
...
Number of rows read         = 4
Number of rows skipped      = 0
Number of rows loaded       = 3
Number of rows rejected     = 1
Number of rows deleted      = 0
Number of rows committed    = 4

Как мы видим, были приняты 3 строки:

db2 "select * from timestamp_load_test"

C1          C2                        
----------- --------------------------
          1 2019-10-13-09.00.00.000000
          2 2019-10-13-09.00.00.000000
          4 2019-10-13-00.00.00.000000

Конечно, они отображаютсяс частью времени, но фактическое форматирование будет зависеть от используемого клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...