Выберите данные из диапазона дат в DB2 SQL - PullRequest
0 голосов
/ 08 апреля 2019

У меня проблема при попытке получить данные в DB2 SQL.У меня есть имя таблицы StProdMoves, и она содержит данные, подобные этим

ProdName | Status  | Brand | Type  | Date(Numeric)
----------+---------+-------+-------+-----------
ORANGE    | 10      |  SBR  |  IN   | 20181217105640
APPLE     | 10      |  SBR  |  IN   | 20181220143520
GARLIC    | 20      |  SBR  |  IN   | 20190107095740
APPLE     | 20      |  JUM  |  OUT  | 20190107121050
ORANGE    | 20      |  AUR  |  OUT  | 20190110164530
ORANGE    | 20      |  AUR  |  IN   | 20190110000000
GARLIC    | 10      |  SBR  |  OUT  | 20190211000000

Что такое запрос, если я хочу выбрать данные о продажах между двумя датами из диапазона дат?

ДляНапример, я хочу выбрать продукты, которые остались в диапазоне 31/12/2018 и 07/01/2019 и brand = SBR и Status = 10.

Редактировать: я пытаюсь получить данные, используя этот запрос, но не все продуктывыберите шоу в этом диапазоне дат, а затем отобразите результат, подобный следующему:

SELECT * FROM StProdMoves WHERE DATE(TO_DATE(SUBSTR(DIGITS(Date), 1, 8), 'YYYYMMDD')) BETWEEN '31/12/2018' AND '07/01/2019' AND Brand='SBR' AND Status=10

Позже как ProducName, Status, Brand, DateIn и DateOut, где отображаются все продукты, существующие на эту дату или диапазон дат, например

 ProdName | Status  | Brand |  DateIn  | DateOut
----------+---------+-------+-------+-----------
ORANGE    | 10      |  SBR  | 20181217 | ---
APPLE     | 10      |  SBR  | 20181220 | ---
PEAR      | 10      |  SBR  | 20181120 | 20190106

Ответы [ 4 ]

1 голос
/ 08 апреля 2019

Если ваши даты имеют значения Numeric в указанном вами формате, наиболее эффективный способ запроса таблицы с параметрами DATE должен выглядеть следующим образом:

select *
from (
          select 20181217105640 from sysibm.sysdummy1
union all select 20181220143520 from sysibm.sysdummy1
) StProdMoves (DateNumeric)
where 
    DateNumeric > bigint(varchar_format(DATE('2018-12-18'), 'YYYYMMDDHH24MISS'))
and DateNumeric < bigint(varchar_format(DATE('2019-01-06'), 'YYYYMMDDHH24MISS'));

Таким способом мы переводим входные параметры Date в представление ваших данных с отметкой времени Numeric.

0 голосов
/ 08 апреля 2019

Как насчет

SELECT * FROM "StProdMoves"
WHERE "Date(Numeric)" BETWEEN DECIMAL(DATE('2018-12-31')) * 1000000  
                          AND DECIMAL(DATE('2019-01-07')) * 1000000 + 999999
0 голосов
/ 08 апреля 2019

Это вопрос о том, как сформировать предложение WHERE запроса.


Если столбец Date имеет тип данных строки (например, VARCHAR(n), CHARACTER(n) и т. Д.), То, учитывая их формат, можно выполнить сравнение строк, например:

DateColumn >= '2018-12-31' and DateColumn < '2019-01-06'

Если вы на самом деле имеете дело с DATE типом данных , вы можете преобразовать свои строки в соответствующие типы данных перед сравнением, например:

DateColumn >= DATE('2018-12-31') and DateColumn < DATE('2019-01-06')

Если вы имеете дело с TIMESTAMP:

DateColumn >= TIMESTAMP('2018-12-31 00:00:00') AND DateColumn < TIMESTAMP('2019-01-06 00:00:00')

EDIT

Если вы имеете дело с числовым типом данных (как показано в отредактированном вопросе), вы можете просто сделать числовое сравнение:

DateColumn >= 20181231000000 and DateColumn < 20190106000000

Примечание: обычно не рекомендуется именовать столбцы, например, функцию RDBMS или тип данных. Я переименовал вашу колонку с Date на DateColumn в примерах.

0 голосов
/ 08 апреля 2019

Вы можете попробовать следующее

select * from StProdMoves where Date >= '2018-12-31' and Date <= '2019-01-06'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...