SQL: мне нужно отформатировать Select Distinct Statement с Case в качестве одного из значений - PullRequest
0 голосов
/ 13 марта 2019

Поэтому я пытаюсь выбрать отдельные операторы из таблицы с компонентом времени, который отформатирован так: «ММ / ДД / ГГГГ ЧЧ: МИ: СС АМ».

Логика такова:

(if C_StartTime >= date(C_StartTime) + 6:00:00 AM 
AND C_StartTime < date(C_StartTime) + 5:59:59AM 
then C_StartTime,'MM/DD/YYYY' 
ELSE (C_StartTime,'MM/DD/YYYY')-1)
AS DateOnly

Я могу выбрать разных операторов прямо сейчас, но они входят и выходят несколько раз в день, поэтому время отличается.Следует отметить, что «Сегодня» в этой компании с 13.03.196 с 6:00 до 19.03.55: 59:59.

Ниже приведен окончательный код, который я пытался выполнить

SELECT
  DISTINCT (
    (
      CASE WHEN C_StartTime >= date(C_StartTime) +.25
         AND C_StartTime < date(C_StartTime) +.9999 
         THEN date(C_StartTime) 
         ELSE date(C_StartTime) -1
    ) as DateOnly,
    C_operator,
    C_operatorname,
    C_WorkCentreName
    FROM
      OPERATORTABLE
    WHERE
      .....

РЕДАКТИРОВАТЬ >>>>>>

Это то, что я получаю.

Это то, что мне нужно

Я ищу номер оператора, имя оператора и только дату (со знанием того, что 1/4/2019 5:59:00 AM = 1/3/2019

1 Ответ

0 голосов
/ 13 марта 2019

Я думаю, вам, вероятно, нужно что-то вроде trunc(c_starttime - 6/24) + 6/24, чтобы начать день в 6 утра вместо полуночи:

WITH dts AS (SELECT to_date('13/03/2019 05:59:59', 'dd/mm/yyyy hh24:mi:ss') dt FROM dual UNION ALL
             SELECT to_date('13/03/2019 06:00:00', 'dd/mm/yyyy hh24:mi:ss') dt FROM dual UNION ALL
             SELECT to_date('13/03/2019 06:00:01', 'dd/mm/yyyy hh24:mi:ss') dt FROM dual UNION ALL
             SELECT to_date('14/03/2019 05:59:59', 'dd/mm/yyyy hh24:mi:ss') dt FROM dual UNION ALL
             SELECT to_date('14/03/2019 06:00:00', 'dd/mm/yyyy hh24:mi:ss') dt FROM dual)
SELECT dt,
       dt - 6/24 adj_dt,
       TRUNC(dt - 6/24) trunc_adj_dt,
       TRUNC(dt - 6/24) + 6/24 adj_start_of_dt
FROM   dts;

DT                  ADJ_DT              TRUNC_ADJ_DT        ADJ_START_OF_DT
------------------- ------------------- ------------------- -------------------
13/03/2019 05:59:59 12/03/2019 23:59:59 12/03/2019 00:00:00 12/03/2019 06:00:00
13/03/2019 06:00:00 13/03/2019 00:00:00 13/03/2019 00:00:00 13/03/2019 06:00:00
13/03/2019 06:00:01 13/03/2019 00:00:01 13/03/2019 00:00:00 13/03/2019 06:00:00
14/03/2019 05:59:59 13/03/2019 23:59:59 13/03/2019 00:00:00 13/03/2019 06:00:00
14/03/2019 06:00:00 14/03/2019 00:00:00 14/03/2019 00:00:00 14/03/2019 06:00:00

Я выбрал столбцы adj_dt и trunc_adj_dt, чтобы вы могли видетькак вычисляется столбец adj_start_of_dt из исходного столбца dt.

Возможно, вам не нужно выводить 6 утра в столбце даты начала, поэтому вы можете пропустить это (т. е. это столбец trunc_adj_dt, который будет после столбца вэто дело).

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