No PostgreSQL, você pode usar o
to_date()
função para converter uma string em uma data. Sintaxe
A sintaxe fica assim:
to_date(text, text)
Onde o primeiro argumento é uma representação de string da data e o segundo argumento define o modelo que o primeiro argumento usa.
Exemplo
Aqui está um exemplo básico para demonstrar.
SELECT to_date('10 Feb 2010', 'DD Mon YYYY');
Resultado:
2010-02-10
Modelos
O segundo argumento fornece o modelo no qual o primeiro argumento é fornecido. Isso às vezes é chamado de “string de formato”.
O modelo consiste em um ou mais padrões de modelo e, opcionalmente, um ou mais modificadores de padrão de modelo.
Padrões de modelo
Usando o exemplo anterior,
DD
é um padrão de modelo e Mon
é um padrão de modelo. YYYY
também é um padrão de modelo. Estes foram todos combinados para formar o modelo. Você pode mover cada padrão de modelo conforme necessário. E você pode usar diferentes padrões de modelo completamente.
Aqui estão mais alguns exemplos que usam a mesma data, mas em formatos diferentes (e, portanto, usando modelos diferentes).
\x
SELECT
to_date('10 Feb 2010', 'DD Mon YYYY') AS "DD Mon YYYY",
to_date('Feb 10 2010', 'Mon DD YYYY') AS "Mon DD YYYY",
to_date('10/02/2010', 'DD/MM/YYYY') AS "DD/MM/YYYY",
to_date('02/10/2010', 'MM/DD/YYYY') AS "MM/DD/YYYY",
to_date('02-10-2010', 'MM-DD-YYYY') AS "MM-DD-YYYY",
to_date('02102010', 'MMDDYYYY') AS "MMDDYYYY",
to_date('02-10-10', 'MM-DD-YY') AS "MM-DD-YY";
Resultado (usando saída vertical):
DD Mon YYYY | 2010-02-10 Mon DD YYYY | 2010-02-10 DD/MM/YYYY | 2010-02-10 MM/DD/YYYY | 2010-02-10 MM-DD-YYYY | 2010-02-10 MMDDYYYY | 2010-02-10 MM-DD-YY | 2010-02-10
Portanto, todos usam a mesma data, mas a data é fornecida em formatos diferentes. É o trabalho do modelo especificar explicitamente ao Postgres em qual formato a data foi fornecida.
Como você provavelmente pode imaginar, se não fornecermos o modelo, algumas datas podem ser interpretadas de maneira errada, especialmente se a data usar uma localidade diferente para seu formato.
Por exemplo, 01/03/2010 pode ser interpretado como primeiro de março ou três de janeiro, dependendo da localidade.
Modificadores de padrão de modelo
Às vezes, você também pode precisar adicionar um modificador de padrão de modelo ao modelo.
Por exemplo, se sua data usa um sufixo de número ordinal, você precisa garantir que seja interpretado como tal.
SELECT
to_date('10th Feb 2010', 'DDth Mon YYYY') AS "10th Feb 2010",
to_date('01st Feb 2010', 'DDth Mon YYYY') AS "01st Feb 2010",
to_date('03rd Feb 2010', 'DDth Mon YYYY') AS "03rd Feb 2010";
Resultado (usando saída vertical):
10th Feb 2010 | 2010-02-10 01st Feb 2010 | 2010-02-01 03rd Feb 2010 | 2010-02-03
Se eu não tivesse usado o modificador de padrão de modelo, teria recebido um erro ao usar essas datas.
Segue um exemplo para ilustrar.
SELECT to_date('10th Feb 2010', 'DD Mon YYYY');
Resultado:
ERROR: invalid value "th" for "Mon" DETAIL: The given value did not match any of the allowed values for this field.
Lista completa de padrões e modificadores de modelo
O Postgres inclui muito mais padrões e modificadores de template.
Eles também podem ser usados ao formatar valores de data/hora (por exemplo, ao usar o
to_char()
função para converter um carimbo de data/hora em uma string). Consulte Padrões de modelo e modificadores para formatação de data/hora no PostgreSQL para obter uma lista completa.