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

Como extrair ou converter dados de tempo de uma string no SQL Server

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() .