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 xml , grande e sql_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.