2010-05-08 6 views

Répondre

5

je tire de la hanche, mais voici un début:

DECLARE @STARTDATE DATETIME 
DECLARE @ENDDATE DATETIME 

SET @STARTDATE = '05/01/2010' 
SET @ENDDATE = GETDATE() 

-- Find the seconds between these two dates 
SELECT DATEADD(SECOND, Number, @StartDate) AS N 
FROM Numbers 
WHERE Number < DATEDIFF(SECOND, @STARTDATE, @ENDDATE) 

Cela suppose une table appelée nombres, avec une colonne nommée Nombre contenant des valeurs de 1 vers le haut. Pour être en mesure d'obtenir des résultats pour un mois entier, vous aurez besoin d'avoir des valeurs jusqu'à environ 2,5 millions. Je garderais la requête à peut-être un jour, ce qui signifie que la table des nombres peut s'en tirer avec des valeurs inférieures à 100 000.

est ici un grand article sur les tables numéros: http://www.sqlservercentral.com/articles/Advanced+Querying/2547/

L'inscription est obligatoire, mais il est gratuit. Si vous faites une programmation SQL Server sérieuse ce site est très utile.

+0

Je pense que 'Number <= DATEDIFF (SECOND, @StartDate, @EndDate)' serait préférable car il peut utiliser un index et vous avez un problème avec l'utilisation de l'alias dans la clause where tel quel. (+1 pour me battre pour obtenir du code) –

1

Vous aurez probablement besoin d'un tableau de nombres auxiliaires pour cela. Avez-vous besoin de toutes les secondes représentées ou pouvez-vous simplement arrondir à la seconde et au groupe les plus proches?

De combien de secondes parlons-nous ici et dans quel format les stockez-vous actuellement? Sont-ils déjà arrondis? Si ce n'est pas alors peut-être pour éviter la surcharge de les arrondir ou de faire une requête de type BETWEEN à chaque fois (ainsi que les DATEADD répétés) peut-être vous pourriez utiliser la réponse DATEDIFF de Marc à l'insertion/mise à jour pour stocker les secondes date puis simplement joindre à la table des nombres en utilisant la colonne numérique calculée.

Code pour créer une table de nombres à partir d'ici http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-numbers-table.html Juste pour ajouter à la réponse de Brad.

CREATE TABLE dbo.Numbers 
( 
    Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED 
) 

WHILE COALESCE(SCOPE_IDENTITY(), 0) <= 1000000 
BEGIN 
    INSERT dbo.Numbers DEFAULT VALUES 
END 
+0

Vous voudrez peut-être élaborer. Je ne suis probablement pas la seule personne qui ne sache pas de quoi tu parles. – Gabe

+0

Battez-moi. Cela ressemble sûrement à une utilisation parfaite pour une table de chiffres. – BradBrening

0
DATEDIFF (s , @FirstDate , @SecondDate) 
Questions connexes