Không có chức năng nào như vậy trong SQL Server. Bạn có thể dễ dàng tìm thấy số min and max dates được phép trong BOL (1753-01-01 - 9999-12-31). Hoặc bạn có thể khó viết mã một ngày khác một cách dễ dàng (nếu bạn thực sự làm việc với sinh nhật, 1800-01-01 - 2100-12-31 có lẽ sẽ đủ). Hoặc bạn có thể (nếu nó là truy vấn nhiều bạn đã thể hiện), có liên hiệp rơi trở lại vào ngày sinh nhật chính nó:
SELECT EmployeeName FROM Employee
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Birthday) AND
Coalesce(@EndDate, Birthday)
Nhưng lưu ý rằng điều này sẽ không nhất thiết phải mở rộng quy mô cũng cho các bảng rất lớn.
Sửa sau khi chấp nhận, để đáp ứng với nhận xét từ OP
Nói chung, cho SQL, nếu bạn đang cần "tham khảo" dữ liệu thường xuyên, bạn thêm nó như là một bảng chính mình. (Google cho "bảng lịch" hoặc "số bảng sql"). Vì vậy, trong trường hợp này, nếu bạn muốn, bạn có thể thêm một "hằng số" (hoặc có thể "giới hạn" bảng):
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
Mà bạn sau đó có thể tham khảo trong các truy vấn (hoặc thông qua một subselect, hoặc bằng cách xuyên tham gia vào bảng này). Ví dụ.
SELECT EmployeeName
FROM Employee, Constants
WHERE EmployeeID = @EmployeeId AND
Birthday BETWEEN Coalesce(@StartDate, Constants.datetimeMin) AND
Coalesce(@EndDate, Constants.datetimeMax)
(Các Khóa, khóa chính, và Kiểm tra hạn chế, làm việc cùng nhau để đảm bảo rằng chỉ có một hàng duy nhất bao giờ sẽ tồn tại trong bảng này)
Rất thú vị. Tôi chưa từng thấy kiểu mẫu Coalesce (@StartDate, Birthday) trước đây. Tôi nghĩ rằng việc tạo một biến được gọi là maxdate và mindate và thiết lập các giá trị của nó cho các ngày được mã hóa cứng có thể dễ đọc hơn nhiều. Nhưng yeah, thông tin chính tôi đang tìm kiếm là thiếu enums/hằng số trong SQL – Chaitanya
Re COALESCE trick - +1 với tuyên bố rằng nó sẽ không mở rộng cho các bảng lớn, SQL Server dường như không thể sử dụng chỉ mục trên cột Sinh nhật. Mã hóa cứng tối thiểu và ngày tối đa hoạt động tốt với chỉ mục. –