sql >> Databasteknik >  >> RDS >> Sqlserver

Datumdel för tiden mellan (istället för Konvertera datum)

Bara till exempel kan du använda detta

DECLARE 
    @min FLOAT = CAST(CAST('19000101 12:20' AS DATETIME) AS FLOAT),
    @max FLOAT = CAST(CAST('19000101 15:50' AS DATETIME) AS FLOAT)

SELECT 
    *
FROM table
WHERE CAST(DateField AS FLOAT) - FLOOR(CAST(DATEFIELD AS FLOAT)) BETWEEN @min AND @max

Men det här är faktiskt ingen lösning!!!

Det bästa sättet är att införa ytterligare en beräknad kolumn som

NewColumn AS DATEPART(HOUR, DateColumn)*100+DATEPART(minute, DateColumn)  

Skapa index på den och använd in where-satsen

WHERE NewColumn BETWEEN 1220 AND 1550


  1. MySQL Ändra samling av alla tabeller

  2. SQL Query med union och gå med

  3. ORACLE TRIGGER INSERT INTO ... (VÄLJ * ...)

  4. Filtrera ett MySQL-resultat i Delphi