Les deux requêtes ci-dessous se traduisent par le même nombre
SELECT CONVERT(bigint,CONVERT(datetime,'2009-06-15 15:00:00'))
SELECT CAST(CONVERT(datetime,'2009-06-15 23:01:00') as bigint)
Résultat
39978
39978
Le numéro généré ne sera différent que si les jours sont différents. Il existe un moyen de convertir le DateTime en un nombre plus précis, comme nous le faisons dans .NET avec la propriété .Ticks?
J'ai besoin d'au moins une minute de précision.
Eh bien, je le ferais comme ceci:
select datediff(minute,'1990-1-1',datetime)
où '1990-1-1' est un datetime de base arbitraire.
SELECT CAST(CONVERT(datetime,'2009-06-15 23:01:00') as float)
donne 39977.9590277778
Si le but de ceci est de créer une valeur unique à partir du date
, voici ce que je ferais
DECLARE @ts TIMESTAMP
SET @ts = CAST(getdate() AS TIMESTAMP)
SELECT @ts
Ceci obtient la date et la déclare comme un simple horodatage
DECLARE @baseTicks AS BIGINT;
SET @baseTicks = 599266080000000000; --# ticks up to 1900-01-01
DECLARE @ticksPerDay AS BIGINT;
SET @ticksPerDay = 864000000000;
SELECT CAST(@baseTicks + (@ticksPerDay * CAST(GETDATE() AS FLOAT)) AS BIGINT) AS currentDateTicks;
Et voici une version bigint du même
DECLARE @ts BIGINT
SET @ts = CAST(CAST(getdate() AS TIMESTAMP) AS BIGINT)
SELECT @ts
Utilisez DateDiff
pour cela:
DateDiff (DatePart, @StartDate, @EndDate)
DatePart
va de l'année à la nanoseconde.
Plus ici .. http://msdn.Microsoft.com/en-us/library/ms189794.aspx
CAST à un flottant ou décimal au lieu d'un int/bigint.
La partie entière (avant le point décimal) représente le nombre de jours entiers. Après la décimale se trouvent les jours fractionnaires (c'est-à-dire le temps).
Vous pouvez utiliser T-SQL pour convertir la date avant qu'elle ne parvienne à votre programme .NET. C'est souvent plus simple si vous n'avez pas besoin de faire de conversion de date supplémentaire dans votre programme .NET.
DECLARE @Date DATETIME = Getdate()
DECLARE @DateInt INT = CONVERT(VARCHAR(30), @Date, 112)
DECLARE @TimeInt INT = REPLACE(CONVERT(VARCHAR(30), @Date, 108), ':', '')
DECLARE @DateTimeInt BIGINT = CONVERT(VARCHAR(30), @Date, 112) + REPLACE(CONVERT(VARCHAR(30), @Date, 108), ':', '')
SELECT @Date as Date, @DateInt DateInt, @TimeInt TimeInt, @DateTimeInt DateTimeInt
Date DateInt TimeInt DateTimeInt
------------------------- ----------- ----------- --------------------
2013-01-07 15:08:21.680 20130107 150821 20130107150821