конвертировать int ГГГГММДД в ​​дату AS400 - PullRequest
1 голос
/ 26 апреля 2019

Мне нужно конвертировать целое число в формат даты в AS400.

У меня есть поле с именем ivdat8, которое является целым числом в отформатированном YYYYMMDD.

Мне нужноиспользуйте предложение WHERE для выбора данных между двумя датами, сегодня и 3 дня назад.

Для этого я использую строку ниже:

Where
    ivdat8 Between (Select current date - 3 days from sysibm.sysdummy1) And (Select current date from sysibm.sysdummy1)

Текущая дата из sysibm является истиннойформат даты, но ivdat является целым числом.

Как я могу преобразовать ivdat8 в формат даты, который можно использовать в предложении WHERE?

Я попытался из приведенного ниже преобразовать int в дату:

cast(cast(A.ivdat8 as varchar(50)) as date)

&

TIMESTAMP_FORMAT(ivdat8,'YYYYMMDD')

Ответы [ 4 ]

3 голосов
/ 26 апреля 2019

На самом деле для производительности лучше не преобразовывать данные столбца ivdat8, а делать это с параметрами, подобными приведенным ниже.

select ivdat8
from table (values 
  int(to_char(current date - 2 days, 'YYYYMMDD'))
, int(to_char(current date - 5 days, 'YYYYMMDD'))
) t (ivdat8)
where ivdat8 between 
    int(to_char(current date - 3 days, 'YYYYMMDD')) 
and int(to_char(current date, 'YYYYMMDD'));
1 голос
/ 26 апреля 2019

Самый простой способ сделать это, не вызывая сложного преобразования в запросе, это использовать это:

cast(digits(cast(A.ivdat8 as dec(8))) || '000000' as date)

Полному предложению where также не нужно выбирать из sysibm.dummy1.

where cast(digits(cast(A.ivdat8 as dec(8))) || '000000' as date) between current date - 3 days and current date

Если у вас есть индексы, построенные на ivdat8, самый быстрый выбор будет:

where A.ivdat8 between cast(Current date - 3 days as dec(8)) and cast(Current Date as dec(8))
0 голосов
/ 26 апреля 2019

попробуйте

Where cast(TIMESTAMP_FORMAT(cast(ivdat8 as varchar(8)), 'YYYYMMDD') as date)                                                        
      Between (current date - 3 days) and current date
0 голосов
/ 26 апреля 2019

Удалось преобразовать int в дату, сначала я должен был привести его как строку, а затем использовать TO_DATE

To_Date(cast(A.ivdat8 as varchar(50)),"YYYYMMDD")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...