Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wyszukiwanie między datami i godzinami w SQL Server 2008

powinieneś spojrzeć na formaty daty i godziny dostępne w SQL Server:http:// msdn.microsoft.com/en-us/library/ms187928.aspx

yyyy-mm-dd hh:mi jest tym, czego powinieneś użyć:

spróbuj:

SELECT
    *
    FROM Records
    WHERE DateCreated>='2007-02-30 10:32' AND DateCreated<='2008-06-21 14:19'

w powyższym zapytaniu ciągi zostaną przekonwertowane na typ danych datetime, jeśli DateCreated to kolumna daty i godziny. a zapytanie zadziała.

możesz tworzyć lokalne zmienne typu data/godzina i używać zapytania takiego jak:

DECLARE @StartDate datetime, @EndDate datetime

SELECT @StartDate='2007-02-30 10:32', @EndDate='2008-06-21 14:19'

SELECT
    *
    FROM Records
    WHERE DateCreated>[email protected] AND DateCreated<[email protected]

Lubię używać <, <=,>=lub>, ponieważ zapewnia większą elastyczność niż BETWEEN i zmusza do zastanowienia się nad włączeniem punktów końcowych lub nie.

Kolejną rzeczą do rozważenia jest uzyskanie wszystkich danych z całego dnia:

DECLARE @StartDate datetime, @EndDate datetime

--set the days you want
SELECT @StartDate='2007-02-30 10:32', @EndDate='2008-06-21 14:19'

--remove the time
SELECT @StartDate=DATEADD(day,DATEDIFF(day,0,@StartDate),0), @EndDate=DATEADD(day,DATEDIFF(day,0,@EndDate),0)

--get everything on '2007-02-30' up to the end of the day on '2008-06-21'
SELECT
    *
    FROM Records
    WHERE DateCreated>[email protected] AND DateCreated<@EndDate+1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamiczny kierunek zamówienia

  2. Mvc-Mini-Profiler v1.7 w projekcie EF 4.1 Code-First nie profiluje SQL

  3. SQL Server 2014:natywne szyfrowanie kopii zapasowych

  4. Zapytanie SQL wypełniania zasobnika CTE

  5. MSSQL cast([varcharColumn] to int) w SELECT jest wykonywany przed klauzulą ​​WHERE odfiltrowującą złe wartości