AS400 ГГГГММДД - 1 месяц - PullRequest
       1

AS400 ГГГГММДД - 1 месяц

2 голосов
/ 01 декабря 2011

Мы получаем данные от одного из наших партнеров, использующего базу данных i5 AS / 400.
Все столбцы с датами представлены в формате ГГГГММДД.В моем запросе я хочу добавить только материалы, добавленные в прошлом месяце.

Я знаю, что могу получить current_date и вычесть 1 месяц, но это происходит в формате даты.
Так что я могу выбрать либовозьмите YYYYMMDD и преобразуйте его в формат даты, или возьмите текущую дату и измените ее на формат YYYYMMDD.

Поскольку AS / 400 отсутствует в команде преобразования, которую имеет tsql, я не уверен, какаялучший способ пойти.

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Я научился этому трюку из списка MIDRANGE-L .

YYYYMMDD <= DEC(REPLACE(CHAR(CURRENT_DATE - 1 MONTH, ISO), '-', ''), 8, 0)
1 голос
/ 01 декабря 2011

Полагаю, вы говорите, что столбец даты - это фактически восьмизначное числовое поле, в котором содержатся значения, которые мы интерпретируем как даты. Я также предполагаю, что вы выполняете эти запросы непосредственно к базе данных i5.

Вы хотите преобразовать дату в числовое значение ГГГГММДД, а затем выполнить запрос к полю ГГГГММДД. Преобразование значения ГГГГММДД в ​​базе данных в дату и сравнение с этим потребует преобразования каждого значения, что исключит возможность использования индекса по этому столбцу. Это также открывает вам проблемы из-за неправильных дат в поле ГГГГММДД.

Вот пример преобразования вычисления даты в восьмизначное число в виде ГГГГММДД:

select year(current_date - 1 month) * 10000 +
       month(current_date - 1 month) * 100 + 
       day(current_date - 1 month)           
from sysibm.sysdummy1                        

Вы можете использовать это в запросе, подобном этому:

select *                              
from libname.tablename                    
where date_field >=                          
  year(current_date - 1 day) * 10000 +
  month(current_date - 1 day) * 100 + 
  day(current_date - 1 day)           

Альтернативой является использование такого инструмента, как IDATE. Это значительно упрощает преобразование чисел в даты. Перейдите по этой ссылке и найдите IDATE для получения дополнительной информации об этой опции.

1 голос
/ 01 декабря 2011

Лучше всего поставить дату, которую вы ищете, в формате ГГГГММДД.Таким образом, вы позволяете базе данных выполнять свою работу по сравнению данных со спецификациями запроса.

...