Problema:
Você gostaria de converter uma string contendo uma data e hora em um valor TIME no SQL Server.
Precisamos converter uma string contendo um nome de dia da semana, data e hora em um valor TIME.
Solução 1:
Usaremos o
PARSE()
função. Aqui está a consulta que você escreveria:SELECT PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Aqui está o resultado:
11:23:11.1134505
Discussão:
Use o
PARSE()
função para converter uma string contendo um nome de dia da semana, data e hora para o tipo de dados TIME. Esta função usa a string para converter, a palavra-chave AS e um novo tipo de dados (no nosso exemplo, TIME
). A string deve conter um valor que represente esse tipo de dados. Em nosso exemplo, a string 'February 2, 2020 11:23:11.1134505'
armazena um valor de tempo. Observe que a hora é apenas parte dessa string, que também contém o nome do dia da semana. Não use o
CONVERT()
ou CAST()
funções neste caso; eles também retornam um tipo de dados TIME, mas sem o dia da semana. Se você estiver usando um idioma falado diferente do idioma do servidor, inclua a palavra-chave USING e o código de cultura apropriado. Para o idioma polonês, você escreveria:
SELECT PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) AS time_value;
Para obter mais informações sobre valores de parâmetros de cultura, consulte a documentação oficial do SQL Server.
Neste caso, você deve usar o
PARSE()
função, mesmo que não tenha o melhor desempenho. Se você estiver operando em uma string representando um valor de tempo que não armazenar dados adicionais (como o nome do dia da semana), use o CASE()
função. Aqui está um exemplo. Solução 2:
SELECT CAST('2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Aqui está o resultado:
11:23:11.1134505
A cadeia de caracteres que contém a data e a hora a serem convertidas deve estar no formato do tipo de dados de data e hora T-SQL. Você pode ler mais na documentação do SQL Server.
O
CAST()
função é ANSI SQL Standard e seu desempenho é melhor que CONVERT()
ou PARSE()
. Finalmente, você também pode usar o
CONVERT()
função. Veja o próximo exemplo. Solução 3:
SELECT CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') AS time_value;
O resultado:
11:23:11.1134505
O
CONVERT()
A função recebe três argumentos:o novo tipo de dados, a string a ser convertida e o formato (opcional) desejado. No entanto, você só deve usar esta função se precisar especificar como os dados de data e hora devem ser formatados, pois seu desempenho não é tão bom quanto CAST()
.