Vejo perguntas semelhantes , mas a maioria tem a ver com data e hora ou requisitos bastante diferentes.
Eu tenho um relatório CSV que tem uma coluna de tempo armazenada como HH:MM[:SS] (se for superior a 1 dia, ele adiciona :00 por segundos... irritantemente, e eu não tenho controle sobre como o relatório em si é executado. ) Acho que, na tarefa de coluna derivada, podemos descartar segundos.
Exemplos:
- 23:54 = 23H 54M
- 27:35:00 = 27H 35M 00S
Minhas perguntas são:
- Se o CSV carregar a coluna como texto, qual expressão preciso para a coluna derivada?
- O que devo definir o tipo de dados como no banco de dados SQL?
Informações pertinentes: SQL Server 2014 e SSDT para VS 2013
Obrigado, Wes
2) Tipos de dados de data/hora geralmente são escolhas problemáticas para armazenar durações. Em vez disso, use um inteiro ou decimal para qualquer resolução apropriada (segundos ou milissegundos são populares, mas minutos podem funcionar para você neste caso).
1) Neste caso, a opção mais simples pode ser:
(DT_I4)TOKEN(Column,":",1) * 60 + (DT_I4)TOKEN(Column,":",2)
.Outros métodos:
(DT_I4)SUBSTRING( [Column], 1, 2 ) * 60 + (DT_I4)SUBSTRING( [Column], 4, 2 )
.(DT_I4)SUBSTRING(Column,1,FINDSTRING(Column,":",1) - 1) * 60 + (DT_I4)SUBSTRING(Column,FINDSTRING(Column,":",1) + 1,2)