Дата, например, гггг / гггггг (например, с 2016/17 по 2016) - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть таблица, в которой есть столбец years, а данные похожи на 2016/17;2017/18 и т. Д.

До сих пор у меня есть этот код:

SELECT champion 
FROM championship
WHERE season = (select to_char(sysdate - 730, 'yyyy') from dual)

Я хочу выбрать, например, чемпиона 2 года назад.Как я могу это сделать?

Я думал разбить 2016/17 (это varchar), чтобы получить только 2016, но как?

Это «простой» вопрос, так что я хотел бы сделатьбез функций или чего-то в этом роде.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вместо sysdate - 730 используйте INTERVAL года.Кроме того, вам не потребуется SUBSTR для извлечения первых 4 символов, если ваши сезоны всегда имеют вид <year/year+1>

WHERE season = 
    TO_CHAR(SYSDATE - INTERVAL '2' YEAR,'YYYY') ||'/'|| 
    TO_CHAR(SYSDATE - INTERVAL '1' YEAR,'YY')
0 голосов
/ 03 декабря 2018

Вы можете просто использовать substr:

SELECT champion
FROM championship
WHERE substr(season,1,4) = (to_char(sysdate - interval '2' YEAR,'YYYY') from dual)

to_char(sysdate - interval '2' YEAR,'YYYY') лучше, чем to_char(sysdate - 730, 'yyyy'), пример:

+------------+------------+---------+
+ Date       | -730 day   + -2 year +
+------------+------------+---------+
| 2018-12-31 | 2016-12-31 + 2016    +
| 2019-12-31 | 2017-12-31 + 2017    + 
| 2020-12-31 | 2019-01-01 + 2018    + ==> different year
| 2021-12-31 | 2020-01-01 + 2019    + ==> different year
| 2022-12-31 | 2020-12-31 + 2020    +
| 2023-12-31 | 2021-12-31 + 2021    +
| 2024-12-31 | 2023-01-01 + 2022    + ==> different year
| 2025-12-31 | 2024-01-01 + 2023    + ==> different year
+------------+------------+---------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...