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

Pojedyncze zapytanie sql, które może obsłużyć zarówno zakres dat zerowy, jak i wartościowy na serwerze sql

WITH    limits AS
        (
        SELECT  COALESCE(@startDate, MIN(mydate)) AS startDate, COALESCE(@endDate, MAX(mydate)) AS endDate
        FROM    mytable
        )
SELECT  m.*
FROM    limits
JOIN    mytable m
ON      mydate BETWEEN startDate AND endDate

Będzie to najskuteczniejsze, jeśli istnieje indeks w mydate , ponieważ ten warunek jest sargable i użyje Index Seek .

Jeśli nie ma indeksu, użyj IFNULL konstrukcje proponowane przez innych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest zaufane połączenie?

  2. Najlepsze indeksy do użycia w instrukcji OR w SQL Server

  3. Zapisz tablicę bajtów na serwerze sql

  4. Zaktualizuj XML przechowywany w kolumnie XML w SQL Server

  5. Jaki jest odpowiednik C# typu danych serwera geography sql w .net framework 4.0?