Non esiste tale funzionalità in SQL Server. È possibile trovare facilmente min and max dates consentito in BOL (1753-01-01 - 9999-12-31). Oppure potresti facilmente codificare un'altra data facilmente (se davvero stai lavorando con i compleanni, probabilmente il 1800-01-01 - 2100-12-31 è sufficiente). Oppure si potrebbe (se è la query gamma avete dimostrato), avete la coalesce ricadere al compleanno stessa:
SELECT EmployeeName FROM Employee
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Birthday) AND
Coalesce(@EndDate, Birthday)
Ma si noti che questo non sarà necessariamente in scala bene per tabelle molto grandi.
cura dopo accettare, per rispondere alle osservazioni da OP
In generale, per SQL, se si sta bisogno di dati di "riferimento" di frequente, si aggiunge come un tavolo da soli. (Google per "tabella calendario" o "tabella numero sql"). Quindi, in questo caso, se si volesse, si potrebbe aggiungere un "costanti" (o forse tabella "limiti"):
create table Constants (
Lock char(1) not null,
datetimeMin datetime not null,
datetimeMax datetime not null,
intMin int not null,
intMax int not null,
/* Other Min/Max columns, as required */
constraint PK_Constants PRIMARY KEY (Lock),
constraint CK_Constants_Locked CHECK (Lock='X')
)
insert into Constants (Lock,datetimeMin,datetimeMax,intMin,intMax)
select 'X','17530101','99991231',-2147483648,2147483647
cui si potrebbe quindi fare riferimento nelle query (sia attraverso una selezione secondaria, o mediante giunzione a questo tavolo). Per esempio.
SELECT EmployeeName
FROM Employee, Constants
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Constants.datetimeMin) AND
Coalesce(@EndDate, Constants.datetimeMax)
(la serratura, chiave primaria, e Check vincolo, lavorare insieme per assicurare che solo una singola riga sarà mai esistere in questa tabella)
Molto interessante. Non avevo mai visto il tipo di pattern di Coalesce (@StartDate, Birthday) prima. Penso che la creazione di una variabile chiamata maxdate e mindate e l'impostazione dei suoi valori sulle date hardcoded potrebbe essere molto più leggibile. Ma sì, le informazioni principali che stavo cercando erano la mancanza delle enumerazioni/costanti in SQL – Chaitanya
trucco Re COALESCE - +1 alla dichiarazione che non sarebbe scalabile per tabelle di grandi dimensioni, SQL Server non sembra essere in grado di utilizzare l'indice sulla colonna di compleanno. Le date min e max con hard coding funzionano bene con l'indice. –