Как правило, вы хотите добавить 24
часов, в то время как часовая часть столбца OpenTime
, который, кажется, имеет тип DATETIME
, имеет значения от 00
до 04
.
Поскольку DATEPART(Hour, OpenTime)
возвращает целочисленное значение, вы использовали < 5
, т.е. только целую часть, а в Oracle DB преобразование TO_NUMBER( TO_CHAR(OpenTime,'hh24' ) )
будет эквивалентно этому.
Давайте добавим псевдоним hour
в подзапросе, чтобы не повторять это преобразование для каждой потребности:
WITH t2 AS
(
SELECT TO_NUMBER( TO_CHAR( OpenTime,'hh24' ) ) AS hour
FROM t
)
SELECT CASE WHEN hour < 5
THEN hour + 24
ELSE hour
END AS hour
FROM t2
или, альтернативно, используйте функцию DECODE()
Условное выражение spesifi c до Oracle:
WITH t2 AS
(
SELECT to_number( to_char(OpenTime,'hh24') ) AS hour
FROM t
)
SELECT DECODE( SIGN( hour - 5 ), -1, hour + 24, hour ) AS hour
FROM t2
Демо