ZONE_ABBR в Oracle SQL. Введение
ZONE_ABBR в Oracle SQL позволяет извлекать короткое текстовое обозначение часового пояса, например MSK, PDT, UTC. Оно применяется при форматировании даты и времени через TO_CHAR, что особенно полезно при логировании, отображении данных в разных регионах и анализе временных зон. В этой статье ты найдёшь 50 примеров использования ZONE_ABBR.
🖋️ Как получить аббревиатуру часового пояса
-- Используя TZD или TZR в TO_CHAR:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI TZD') AS abbr FROM dual;
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI TZR') AS region FROM dual;
🔄 Где используется ZONE_ABBR
- Форматирование даты с указанием пояса
- Отображение для журналов, логов, аудита
- BI, дашборды, интерфейсы с международной поддержкой
- Аналитика по регионам
📊 Примеры использования ZONE_ABBR в Oracle SQL (1–5 из 50)
- Получить аббревиатуру по текущему времени:
SELECT TO_CHAR(SYSTIMESTAMP, 'TZD') AS zone_abbr FROM dual;
- Получить полное имя региона:
SELECT TO_CHAR(SYSTIMESTAMP, 'TZR') AS full_region FROM dual;
- Вывести дату, время и зону:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI TZD') AS full_time FROM dual;
- С TIMESTAMP WITH TIME ZONE:
SELECT TO_CHAR(TIMESTAMP '2025-08-30 09:00:00 Europe/Moscow', 'TZD') FROM dual;
- С указанием времени в другой зоне:
SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2025-08-30 10:00:00', 'Asia/Tokyo'), 'TZD') FROM dual;
- С CURRENT_TIMESTAMP:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI TZD') AS ts FROM dual;
- С AT TIME ZONE:
SELECT TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'US/Pacific', 'TZD') AS zone FROM dual;
- С TIMESTAMP WITH LOCAL TIME ZONE:
SELECT TO_CHAR(CAST(SYSTIMESTAMP AS TIMESTAMP WITH LOCAL TIME ZONE), 'TZD') FROM dual;
- Использование TZR и TZD вместе:
SELECT TO_CHAR(SYSTIMESTAMP, 'TZR TZD') AS both FROM dual;
- Форматирование с датой:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI TZR TZD') AS full_info FROM dual;
- С пользовательской датой:
SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2025-10-01 08:00:00', 'Europe/Moscow'), 'TZD') FROM dual;
- Системная дата в нужной зоне:
SELECT TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'Asia/Tokyo', 'TZD') FROM dual;
- Получить аббревиатуру для UTC:
SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2025-10-01 00:00:00', 'UTC'), 'TZD') FROM dual;
- Использование с DBTIMEZONE:
SELECT DBTIMEZONE FROM dual;
- Использование с SESSIONTIMEZONE:
SELECT SESSIONTIMEZONE FROM dual;
- Аббревиатура при MERGE с датой:
MERGE INTO audit_log a
USING (SELECT TO_CHAR(SYSTIMESTAMP, 'TZD') AS zone FROM dual) z
ON (a.event = 'login')
WHEN NOT MATCHED THEN INSERT (event, timezone) VALUES ('login', z.zone);
- Аббревиатура в аналитике:
SELECT user_id, login_time,
TO_CHAR(login_time, 'TZD') AS zone_abbr,
RANK() OVER (PARTITION BY TO_CHAR(login_time, 'TZD') ORDER BY login_time DESC) AS rnk
FROM sessions;
- SELECT с FILTER по TZD:
SELECT COUNT(*) FILTER (WHERE TO_CHAR(login_time, 'TZD') = 'MSK') FROM sessions;
- TO_CHAR с добавлением REGION:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS "ZONE:" TZD') FROM dual;
- Проверка строки TZD = ‘UTC’:
SELECT * FROM events
WHERE TO_CHAR(event_time, 'TZD') = 'UTC';
- Аббревиатура из представления:
CREATE VIEW v_tz AS
SELECT TO_CHAR(SYSTIMESTAMP, 'TZD') AS abbr FROM dual;
- Получить все элементы с текущей TZD:
SELECT * FROM logs
WHERE TO_CHAR(event_time, 'TZD') = TO_CHAR(SYSTIMESTAMP, 'TZD');
- Фильтрация по TZR:
SELECT * FROM logs WHERE TO_CHAR(event_time, 'TZR') = 'Europe/Moscow';
- Объединение TZR и TZD в текст:
SELECT 'Часовой пояс: ' || TO_CHAR(SYSTIMESTAMP, 'TZR TZD') AS msg FROM dual;
- Удаление по TZD:
DELETE FROM logs
WHERE TO_CHAR(event_time, 'TZD') = 'UTC';
- Обновление строки по TZD:
UPDATE users SET timezone_abbr = TO_CHAR(SYSTIMESTAMP, 'TZD')
WHERE user_id = 100;
- TO_CHAR с двойными кавычками:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS TZD') FROM dual;
- SELECT с LIKE по TZD:
SELECT * FROM logs WHERE TO_CHAR(event_time, 'TZD') LIKE 'U%';
- Конкатенация с другой строкой:
SELECT TO_CHAR(SYSTIMESTAMP, 'TZD') || ' Time Zone' FROM dual;
- Получение TZD в функции:
CREATE FUNCTION get_abbr RETURN VARCHAR2 IS
BEGIN
RETURN TO_CHAR(SYSTIMESTAMP, 'TZD');
END;
- JSON-конкатенация с TZD:
SELECT JSON_OBJECT('zone' VALUE TO_CHAR(SYSTIMESTAMP, 'TZD')) FROM dual;
- Использование TZD в аудите:
INSERT INTO audit_log (event, timezone)
VALUES ('update', TO_CHAR(SYSTIMESTAMP, 'TZD'));
- Сохранение TZD как текст в поле:
UPDATE config SET timezone = TO_CHAR(SYSTIMESTAMP, 'TZD') WHERE key = 'system_timezone';
- Форматированный вывод в SELECT:
SELECT TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI TZD') AS full FROM dual;
- Аббревиатура через CAST:
SELECT TO_CHAR(CAST(SYSTIMESTAMP AS TIMESTAMP WITH TIME ZONE), 'TZD') FROM dual;
- Тестирование разных зон:
SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2025-12-31 10:00:00', 'Asia/Dubai'), 'TZD') FROM dual;
- Получение TZD как часть отчёта:
SELECT user_id, login_time, TO_CHAR(login_time, 'TZD') AS zone FROM logins;
- Использование TZR только:
SELECT TO_CHAR(SYSTIMESTAMP, 'TZR') AS region FROM dual;
- Получение TZD с SUBSTR:
SELECT SUBSTR(TO_CHAR(SYSTIMESTAMP, 'TZD'), 1, 2) AS short_abbr FROM dual;
- CONCAT TZR и дата:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYYMMDD') || '_' || TO_CHAR(SYSTIMESTAMP, 'TZR') AS label FROM dual;
- Сравнение TZD между двумя датами:
SELECT CASE
WHEN TO_CHAR(SYSTIMESTAMP, 'TZD') = TO_CHAR(login_time, 'TZD') THEN 'MATCH'
ELSE 'DIFF'
END AS zone_check FROM sessions;
- TZD в MERGE:
MERGE INTO tz_cache t
USING (SELECT TO_CHAR(SYSTIMESTAMP, 'TZD') AS zone FROM dual) d
ON (t.zone = d.zone)
WHEN NOT MATCHED THEN INSERT (zone) VALUES (d.zone);
- С функцией LOCALTIMESTAMP:
SELECT TO_CHAR(LOCALTIMESTAMP, 'TZD') FROM dual;
- Использование TZD с ROWNUM:
SELECT TO_CHAR(SYSTIMESTAMP, 'TZD') FROM dual WHERE ROWNUM = 1;
- Запись TZD в лог через триггер:
CREATE OR REPLACE TRIGGER trg_log
BEFORE INSERT ON logs
FOR EACH ROW
BEGIN
:NEW.zone := TO_CHAR(SYSTIMESTAMP, 'TZD');
END;
📆 Заключение: зачем использовать ZONE_ABBR в Oracle SQL
ZONE_ABBR в Oracle SQL помогает сделать вывод даты и времени понятным пользователю. Аббревиатуры поясов незаменимы в логах, отчётах и веб-интерфейсах. Использование TZD, TZR в TO_CHAR позволяет легко отобразить текущее смещение и идентификатор пояса.
🕸️ Следующая статья:
XMLTABLE в Oracle SQL — как извлекать данные из XML-структур
Если не нашли пример для вашего кейса — напишите в коммментриях. Возьмем в работу.
Спасибо нашёл, что искал!