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

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


No SQL Server, você pode usar o CAST() função para converter uma expressão de um tipo de dados para outro. Esta função funciona quase da mesma forma que CONVERT() função, exceto que a sintaxe é ligeiramente diferente (e CAST() não aceita o style argumento).

Portanto, se você precisar converter uma string em um valor de data/hora, poderá usar o CONVERT() função ou a função CAST() função.

E se você receber um erro ao usar essas duas funções, o PARSE() função pode ser exatamente o que você precisa.

Este artigo contém exemplos usando o CAST() função.


Sintaxe


A sintaxe fica assim:
CAST ( expression AS data_type [ ( length ) ] )

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 .

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 segundo argumento).
SELECT CAST('20 Dec 2018' AS date) AS Result;

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

Assim como com CONVERT() 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 CAST('Homer' AS date) 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 CAST('20 Dec 2018' AS datetime) AS Result;

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

Você também pode especificar a hora junto com a data:
SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

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

Exemplo 3 – Converter para tipo de dados datetime2


Aqui convertemos para o datetime2 tipo de dados:
SELECT CAST('20 Dec 2018' AS datetime2) 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 CAST('20 Dec 2018' AS datetimeoffset) AS Result;

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

Exemplo 5 – Converter para tipo de dados smalldatetime


Aqui convertemos para o smalldatetime tipo de dados:
SELECT CAST('20 Dec 2018' AS smalldatetime) 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 CAST('20 Dec 2018' AS time) 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 CAST('2pm' AS time) 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 CAST('2pm 20 Dec 2018' AS time) 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 CAST('2pm' AS datetime) AS Result;

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

Se você preferir usar para usar o CONVERT() função, veja essas strings para data/hora CONVERT() exemplos usando os mesmos exemplos acima.

Além disso, como mencionado, se você receber um erro ao tentar converter uma string em uma data, tente PARSE() função em vez disso. Funcionará em alguns casos em que CAST() não.