Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como converter uma string em uma data/hora no SQL Server usando CONVERT()


No SQL Server, você pode usar o CONVERT() função para converter uma expressão de um tipo de dados para outro. Portanto, se você precisar converter uma string para um formato de data/hora, esta função pode ajudar.

Este artigo contém exemplos para demonstrar seu uso.


Sintaxe


A sintaxe fica assim:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Esses argumentos são definidos da seguinte forma:
expression
Qualquer expressão válida.
data_type
O tipo de dados de destino. Isso inclui xmlgrandesql_variant . Tipos de dados de alias não podem ser usados.
length
Um inteiro opcional que especifica o comprimento do tipo de dados de destino. O valor padrão é 30 .
style
Uma expressão inteira que especifica como CONVERT() função traduzirá expressão . Para um valor de estilo de NULL, NULL é retornado. data_type determina o intervalo.

Exemplo 1 – Converter em tipo de dados de data


Neste exemplo, convertemos a string em uma data tipo de dados (nós especificamos isso usando date como o primeiro argumento).
SELECT CONVERT(date, '20 Dec 2018') AS Result;

Resultado:
+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Obviamente, a string precisa estar em um estilo que possa ser convertido para o tipo de dados especificado, caso contrário, você receberá um erro:
SELECT CONVERT(date, 'Homer') AS Result;

Resultado:
Conversion failed when converting date and/or time from character string.

Exemplo 2 – Converter para tipo de dados datetime


Neste exemplo, convertemos para o datetime tipo de dados:
SELECT CONVERT(datetime, '20 Dec 2018') AS Result;

Resultado:
+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

Você também pode especificar a hora:
SELECT CONVERT(datetime, '2pm 20 Dec 2018') AS Result;

Resultado:
+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

Exemplo 3 – Converter para tipo de dados datetime2


Neste exemplo, convertemos para o datetime2 tipo de dados:
SELECT CONVERT(datetime2, '20 Dec 2018') AS Result;

Resultado:
+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

Exemplo 4 – Converter para tipo de dados datetimeoffset


Neste exemplo, convertemos para o datetimeoffset tipo de dados:
SELECT CONVERT(datetimeoffset, '20 Dec 2018') AS Result;

Resultado:
+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

Exemplo 5 – Converter para tipo de dados smalldatetime


Neste exemplo, convertemos para o smalldatetime tipo de dados:
SELECT CONVERT(smalldatetime, '20 Dec 2018') AS Result;

Resultado:
+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

Exemplo 6 – Converter para tipo de dados de hora


Neste exemplo, convertemos para o tempo tipo de dados:
SELECT CONVERT(time, '20 Dec 2018') AS Result;

Resultado:
+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

Nesse caso, especificamos uma data, mas não uma hora, então ela voltou como 00:00:00 . Aqui está outro exemplo em que realmente especificamos um horário:
SELECT CONVERT(time, '2pm') AS Result;

Resultado:
+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Mas se adicionarmos a data, obteremos um erro (ao contrário de um exemplo anterior quando convertemos para datetime ):
SELECT CONVERT(time, '2pm 20 Dec 2018') AS Result;

Resultado:
Conversion failed when converting date and/or time from character string.

Portanto, neste caso, você precisaria converter para datetime ou smalldatetime .

Exemplo 7 – Omitindo a Data


Se você omitir a data ao converter para o datetime ou smalldatetime tipos de dados, ele retornará 1900-01-01 como a data:
SELECT CONVERT(datetime, '2pm') AS Result;

Resultado:
+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

Se você receber um erro ao tentar converter uma string em uma data, tente o PARSE() função em vez disso. Funcionará em alguns casos em que CONVERT() não.

Você também pode querer verificar o CAST() função, que é uma maneira padrão ANSI SQL de converter entre tipos de dados. Veja como converter uma string em uma data/hora usando CAST() .