Este artigo contém exemplos de conversão de um smalldatetime valor para um datetime valor no SQL Server.
O pequeno datetime tipo de dados não possui segundos fracionários e seu componente de segundos é sempre definido como zero (:00). Sua precisão é para o minuto mais próximo.
O datahora Por outro lado, o tipo de dados inclui uma parte de segundos fracionários de 3 dígitos e sua precisão é arredondada para incrementos de 0,000, 0,003 ou 0,007 segundos.
Quando você converte uma pequena data e hora valor para datetime , o pequeno tempo de data o valor é copiado para o datetime valor. Os segundos fracionários são definidos como 0.
Na maioria dos casos, é melhor converter para um datetime2 tipo de dados em vez de um datetime . Fazer isso fornecerá maior precisão, usando o mesmo tamanho de armazenamento. No entanto, se você realmente precisar que seja datetime , aqui estão alguns exemplos.
Exemplo 1 – Conversão implícita
Aqui está um exemplo de uma conversão implícita entre smalldatetime e datahora .
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime';
Resultado:
+---------------------+-------------------------+ | smalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Esta é uma conversão implícita porque não estamos usando uma função de conversão (como as abaixo) para convertê-la explicitamente. Nesse caso, o SQL Server executa uma conversão implícita nos bastidores quando tentamos atribuir o smalldatetime valor para um datetime variável.
Neste exemplo, podemos ver que o smalldatetime value não inclui os segundos fracionários, os segundos foram definidos como zero e o minuto foi arredondado para cima do valor real que tentei atribuir a ele.
No entanto, o datetime value inclui uma parte fracionária de 3 dígitos definida como zero.
Exemplo 2 - Alterar a parte fracionária
Mesmo que a parte fracionária seja definida como zero, depois de converter o valor em datetime , agora você pode alterar a parte fracionária (e a parte dos segundos).
Neste exemplo, eu uso o
DATEADD()
função para modificar os segundos fracionários de datetime valor. DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime', DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';
Resultado (usando saída vertical):
smalldatetime | 2025-05-21 10:16:00 datetime | 2025-05-21 10:16:00.000 datetime Modified | 2025-05-21 10:16:00.123
Exemplo 3 – Conversão explícita usando CAST()
Aqui está um exemplo de uma conversão explícita. Neste caso, eu uso o
CAST()
função diretamente dentro do SELECT
para converter explicitamente entre smalldatetime e datahora . DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Resultado:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Exemplo 4 – Conversão explícita usando CONVERT()
Aqui está um exemplo de uma conversão explícita usando o
CONVERT()
função em vez de CAST()
. DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Resultado:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Conforme mencionado, considere converter para um datetime2 tipo de dados em vez de datetime . Isso fornece maior precisão, usando o mesmo tamanho de armazenamento.