Il n'existe aucune fonctionnalité de ce type dans SQL Server. Vous pouvez facilement trouver le min and max dates autorisé dans BOL (1753-01-01 - 9999-12-31). Ou vous pouvez coder dur une autre date facilement (si vous travaillez vraiment avec des anniversaires, 1800-01-01 - 2100-12-31 suffirait probablement). Ou vous pouvez (si elle est la requête de plage que vous avez montré), avez COALESCE revenir à l'anniversaire lui-même:
SELECT EmployeeName FROM Employee
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Birthday) AND
Coalesce(@EndDate, Birthday)
Mais notez que ce ne sera pas nécessairement échelle bien pour très grandes tables.
Edité après accepter, pour répondre aux commentaires de OP
En général, pour SQL, si tu as besoin de données « de référence » souvent, vous ajoutez comme une table vous-même. (Google pour "table de calendrier" ou "table de nombre sql"). Donc, dans ce cas, si vous voulez, vous pouvez ajouter un « constantes » (ou peut-être la table « limites »):
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
que vous pourriez alors faire référence dans les requêtes (soit par une sous-sélection, ou en croix de jonction à cette table). Par exemple.
SELECT EmployeeName
FROM Employee, Constants
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Constants.datetimeMin) AND
Coalesce(@EndDate, Constants.datetimeMax)
(la serrure, la clé primaire et contrainte de vérification, travailler ensemble pour faire en sorte que seule une seule ligne existera jamais dans ce tableau)
Très intéressant. Je n'avais jamais vu le genre de motif Coalesce (@StartDate, Birthday) auparavant. Je pense que la création d'une variable appelée maxdate et mindate et la définition de ses valeurs aux dates codées en dur pourraient être beaucoup plus lisibles. Mais oui, l'info principale que je recherchais était l'absence des énumérations/constantes dans SQL – Chaitanya
Re COALESCE tour - +1 à l'affirmation selon laquelle il ne s'agirait pas de grandes tables, SQL Server ne semble pas pouvoir utiliser index sur la colonne anniversaire. Le codage dur des dates min et max fonctionne bien avec l'index. –