2010-08-06 4 views
0

dans mon application web je suis affichage des vidéos de l'utilisateur, je veux afficher les vidéos qui sont entre 30 jours seulement. Vidéos qui ont été mises en ligne au cours des 30 derniers jours seulement. j'écris requête comme cela, mais il ne fonctionne pas bien ..Entre .. et la clause dans le serveur SQL?

select * 
    from videos 
    where posteddate between getdate()-30 and getdate() 
order by posteddate desc 

peut me aider

Répondre

2

Utilisez le DATEADD function:

WHERE posteddate BETWEEN DATEADD(dd, -30, GETDATE()) 
        AND GETDATE() 

Vous savez que GETDATE() comprend le temps portion?

+0

Vous pouvez encore faire Où posteddate> = DATEADD (dd, -30, GETDATE()) ce qui réduit le supplément appel à GETDATE() et être légèrement plus efficace –

+0

Comment est ce que vous avez écrit sémantiquement différent de la requête OP? – Gabe

0

Dans ce scénario, vous pouvez simplement faire

où posteddate> = getdate() - 30

+0

Aussi dans SQL 2008 vous pouvez faire ce cast (GETDATE() - 30 comme date) pour enlever le temps comme getdate() retournera le timeofday ou même dans SQL 2005 vous pourriez faire cast (GETDATE() - 30 comme varchar (12)) et cela ferait encore une comparaison correcte à partir de minuit –

+0

'getdate' ne retourne pas un nombre; il renvoie une date/heure. À ce stade, vous devez demander "moins 30 quoi?" – cHao

+0

@cHao: SQL standard dit (et SQL Server est d'accord) que c'est "moins 30 jours". Ça * devrait * fonctionner. –

Questions connexes