Referência de funções SQL Timestamp
Referência rápida para operações de carimbo de data/hora em sistemas de banco de dados populares.
Carimbo de data/hora atual
| Banco de dados | Carimbo de data/hora atual (UTC) | Carimbo de data/hora atual (local) |
|---|
| MySQL | AGORA(), UTC_TIMESTAMP() | AGORA(), LOCALTIMESTAMP() |
| PostgreSQL | AGORA(), CURRENT_TIMESTAMP | AGORA(), CURRENT_TIMESTAMP |
| SQLite | datetime('agora') | datetime('agora', 'hora local') |
| Servidor SQL | GETUTCDATE() | GETDATE(), SYSDATETIME() |
| Oráculo | SYSTIMESTAMP, SYS_EXTRACT_UTC(SYSTIMESTAMP) | SYSTIMESTAMP |
Operações de carimbo de data/hora Unix
Obtenha o carimbo de data/hora Unix atual
| Banco de dados | Código |
|---|
| MySQL | UNIX_TIMESTAMP() |
| PostgreSQL | EXTRATO(ÉPOCA DE CURRENT_TIMESTAMP) |
| SQLite | strftime('%s', 'agora') |
| Servidor SQL | DATEDIFF(s, '1970-01-01', GETUTCDATE()) |
| Oráculo | (SYSTIMESTAMP - TO_TIMESTAMP('1970-01-01', 'AAAA-MM-DD')) * 86400 |
Converter carimbo de data/hora Unix em data
| Banco de dados | Código |
|---|
| MySQL | FROM_UNIXTIME(1704067200) |
| PostgreSQL | TO_TIMESTAMP(1704067200) |
| SQLite | datetime(1704067200, 'unixepoch') |
| Servidor SQL | DATEADD(s, 1704067200, '1970-01-01') |
| Oráculo | TO_DATE('1970-01-01', 'AAAA-MM-DD') + (1704067200/86400) |
Converter data em carimbo de data/hora Unix
| Banco de dados | Código |
|---|
| MySQL | UNIX_TIMESTAMP('2024-01-01 00:00:00') |
| PostgreSQL | EXTRATO(ÉPOCA DE '2024-01-01 00:00:00'::timestamp) |
| SQLite | strftime('%s', '2024-01-01 00:00:00') |
| Servidor SQL | DATEDIFF(s, '1970-01-01', '2024-01-01 00:00:00') |
| Oráculo | TO_CHAR('2024-01-01 00:00:00', 'J') - TO_CHAR(DATA '1970-01-01', 'J')) * 86400 |
Formatação de data
Formatos de data comuns
| Banco de dados | ISO 8601 | Formato dos EUA | Formato UE |
|---|
| MySQL | DATE_FORMAT(NOW(), '%Y-%m-%dT%H:%i:%s') | DATE_FORMAT(AGORA(), '%m/%d/%Y') | DATE_FORMAT(AGORA(), '%d/%m/%Y') |
| PostgreSQL | TO_CHAR(NOW(), 'AAAA-MM-DD"T"HH24:MI:SS') | TO_CHAR(AGORA(), 'MM/DD/AAAA') | TO_CHAR(AGORA(), 'DD/MM/AAAA') |
| SQLite | datetime('agora', 'iso8601') | - | - |
| Servidor SQL | FORMAT(GETUTCDATE(), 'aaaa-MM-ddTHH:mm:ss') | FORMAT(GETDATE(), 'MM/dd/aaaa') | FORMAT(GETDATE(), 'dd/MM/yyyy') |
| Oráculo | TO_CHAR(SYSTIMESTAMP, 'AAAA-MM-DD"T"HH24:MI:SS') | TO_CHAR(SYSDATE, 'MM/DD/AAAA') | TO_CHAR(SYSDATE, 'DD/MM/AAAA') |
Operações de fuso horário
Obtenha o fuso horário atual
| Banco de dados | Código |
|---|
| MySQL | TIMEZONE_NAME, @@time_zone |
| PostgreSQL | configuração_atual('fuso horário') |
| SQLite | N/A (sem suporte de fuso horário) |
| Servidor SQL | GETDATE(), DATENAME(TIMEZONE, SYSDATETIMEOFFSET()) |
| Oráculo | SESSIONTIMEZONE, DBTIMEZONE |
Converter fuso horário| Banco de dados | Código |
|----------|------|
| MySQL | CONVERT_TZ('2024-01-01 12:00:00', 'UTC', 'América/Nova_Iorque') |
| PostgreSQL | '2024-01-01 12:00:00 UTC'::timestamptz NO FUSO HORÁRIO 'América/Nova_Iorque' |
| SQLite | N/A |
| Servidor SQL | GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time' |
| Oráculo | FROM_TZ(TIMESTAMP '2024-01-01 12:00:00', 'UTC') NO FUSO HORÁRIO 'América/Nova_Iorque' |
Aritmética de carimbo de data/hora
Adicionar/Subtrair Tempo
| Banco de dados | Adicionar 1 dia | Subtraia 1 hora |
|---|
| MySQL | DATE_ADD(AGORA(), INTERVALO 1 DIA) | DATE_SUB(AGORA(), INTERVALO 1 HORA) |
| PostgreSQL | AGORA() + INTERVAL '1 dia' | AGORA() - INTERVALO '1 hora' |
| SQLite | datetime('agora', '+1 dia') | datetime('agora', '-1 hora') |
| Servidor SQL | DATEADD(dia, 1, GETDATE()) | DATEADD(hora, -1, GETDATE()) |
| Oráculo | SYSDATE + 1 | SYSDATE - (1/24) |
Calcular diferença
| Banco de dados | Dias entre |
|---|
| MySQL | DATEDIFF('2024-01-15', '2024-01-01') |
| PostgreSQL | '2024-01-15'::data - '2024-01-01'::data |
| SQLite | dia de julho('2024-01-15') - dia de julho('2024-01-01') |
| Servidor SQL | DATEDIFF(dia, '2024-01-01', '2024-01-15') |
| Oráculo | TO_DATE('2024-01-15') - TO_DATE('2024-01-01') |
Melhores práticas
1. Armazene carimbos de data e hora em UTC
Sempre armazene carimbos de data/hora no formato UTC e converta para a hora local somente ao exibi-los aos usuários.
-- Good: Store in UTC
CREATE TABLE events (
id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Better: Explicit UTC
CREATE TABLE events (
id INT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
2. Use tipos de dados apropriados
| Caso de uso | Tipo recomendado |
|---|
| Armazenamento UTC | TIMESTAMP COM FUSO HORÁRIO |
| Apenas hora local | TIMESTAMP SEM FUSO HORÁRIO |
| Carimbo de data/hora Unix | BIGINT (para portabilidade) |
| Somente data | DATA |
3. Lidar adequadamente com as conversões de fuso horário
-- PostgreSQL example
SELECT
created_at AT TIME ZONE 'UTC' AS utc_time,
created_at AT TIME ZONE 'America/New_York' AS ny_time,
created_at AT TIME ZONE 'Asia/Shanghai' AS shanghai_time
FROM events;
Ferramentas relacionadas