Você pode simplesmente adicionar os dois.
- se o
Time part
da sua Date
coluna é sempre zero
- e o
Date part
da sua Time
coluna também é sempre zero (data base: 1º de janeiro de 1900)
Adicioná-los retorna o resultado correto.
SELECT Combined = MyDate + MyTime FROM MyTable
Justificativa (parabéns a ErikE / dnolan)
Funciona assim devido à maneira como a data é armazenada como dois bytes de
Integers
4, sendo os 4 bytes esquerdos os date
e os 4 bytes direitos os time
. É como fazer$0001 0000 + $0000 0001 =
$0001 0001
Editar sobre novos tipos do SQL Server 2008
Date
e Time
são tipos introduzidos em SQL Server 2008
. Se você insistir em adicionar, poderá usarCombined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Edit2 sobre perda de precisão no SQL Server 2008 e posterior (parabéns a Martin Smith)
Dê uma olhada em Como combinar data e hora com datetime2 no SQL Server? para evitar perda de precisão usando o SQL Server 2008 e superior.
Lieven Keersmaekers
fonte
1900-01-01
, não?float
. Onde diabos você aprendeu isso? Eles são armazenados como números inteiros : a parte da data é o número de dias desde a data âncora e a parte da hora é o número de "ticks" desde a meia-noite, sendo os ticks definidos como 1/300 sdatetime
e mais precisos paratime
edatetime2
.Se o elemento de tempo da sua coluna de data e o elemento de data da sua coluna de tempo forem zero, então a resposta de Lieven é o que você precisa. Se você não pode garantir que sempre será esse o caso, torna-se um pouco mais complicado:
fonte
The data types datetime and time are incompatible in the add operator.
Esta é uma solução alternativa sem nenhuma conversão de caracteres:
Você só terá precisão de milissegundos dessa maneira, mas isso normalmente seria bom. Eu testei isso no SQL Server 2008.
fonte
Isso funcionou para mim
(no SQL 2008 R2)
fonte
Se você não estiver usando o SQL Server 2008 (ou seja, você possui apenas um tipo de dados DateTime), poderá usar o seguinte TSQL (reconhecidamente bruto e pronto) para obter o que deseja:
É áspero e pronto, mas funciona!
fonte
Se os dois campos tiverem data e hora, basta adicioná-los.
por exemplo:
Se você usou o tipo de dados Data e hora, basta converter o horário para data e hora
por exemplo:
fonte
Converta a primeira data armazenada em um campo de data e hora em uma sequência de caracteres, depois converta a hora armazenada em um campo de data e hora em sequência, acrescente as duas e converta novamente em um campo de data e hora, usando todos os formatos de conversão conhecidos.
fonte
Eu tive muitos erros, como indicado acima, então eu fiz assim
Funcionou para mim.
fonte
Converta os dois campos em DATETIME:
e se você estiver usando,
Getdate()
use isso primeiro:fonte
Impressões:
fonte
Funciona como um encanto
fonte
SELECT CAST (CAST (@DateField Como Data) Como DateTime) + CAST (CAST (@TimeField Como Hora) Como DateTime)
fonte
Outra maneira é usar
CONCAT
eCAST
estar ciente de que você precisa usáDATETIME2(x)
-lo para fazê-lo funcionar. Você pode definirx
qualquer coisa entre0-7
7
significando nenhuma perda de precisão.Devoluções
2018-03-12 07:00:00.0000000
Testado no SQL Server 14
fonte
Para combinar data de uma coluna de data e hora e hora de outra coluna de data e hora, esta é a melhor solução mais rápida para você:
fonte
Encontrei uma situação semelhante em que tive que mesclar os campos Data e Hora com o campo DateTime. Nenhuma das soluções mencionadas acima funciona, especialmente a adição de dois campos como o tipo de dados para adição desses 2 campos não é o mesmo.
Criei abaixo a solução, onde adicionei parte de hora e minuto para a data. Isso funcionou lindamente para mim. Verifique e avise-me se você tiver algum problema.
; com tbl como (selecione StatusTime = '12 / 30/1899 17:17:00 ', StatusDate =' 24/7/2019 12:00:00 ') selecione DATEADD (MI, DATEPART (MINUTE, CAST (tbl .StatusTime AS TIME)), DATEADD (HH, DATEPART (HOUR, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) de tbl
Resultado: 2019-07-24 17: 17: 00.000
fonte