Функция SQL Server возвращает минимальную дату (1 января 1753 года)

Я ищу функцию SQL Server для возврата минимального значения для datetime, а именно 1 января 1753 года. Я бы предпочел не указывать это значение даты в моем script.

Есть ли что-нибудь подобное? (Для сравнения, в С# я мог просто сделать DateTime.MinValue) Или я должен сам написать это?

Я использую Microsoft SQL Server 2008 Express.

Ответ 1

Вы можете написать пользовательскую функцию, которая возвращает минимальное значение даты, например:

select cast(-53690 as datetime)

Затем используйте эту функцию в своих сценариях, и если вам когда-либо понадобится ее изменить, для этого есть только одно место.

Кроме того, вы можете использовать этот запрос, если вы предпочитаете его для лучшей читаемости:

select cast('1753-1-1' as datetime)

Пример функции

create function dbo.DateTimeMinValue()
returns datetime as
begin
    return (select cast(-53690 as datetime))
end

Usage

Usage
select dbo.DateTimeMinValue() as DateTimeMinValue

DateTimeMinValue
-----------------------
1753-01-01 00:00:00.000

Ответ 2

Вы видели объект SqlDateTime? используйте SqlDateTime.MinValue, чтобы получить минимальную дату (1 января 1753 года).

Ответ 3

Поскольку я не могу прокомментировать принятый ответ из-за insufficeint точек репутации, мой комментарий приходит как ответ.

с использованием select cast('1753-1-1' as datetime) происходит из-за сбоя, если он запущен в базе данных с региональными настройками, не принимающими данные в формате YYYY-MM-DD.

Вместо этого используйте select cast(-53690 as datetime) или Convert с указанным форматом datetime.

Ответ 4

Введите дату как родное значение 'yyyymmdd', чтобы избежать региональных проблем:

select cast('17530101' as datetime)

Да, было бы здорово, если бы TSQL имел MinDate() = '00010101', но такой удачи не было.

Ответ 5

Это не 1 января 1753 года, а выберите cast ('' как datetime), который показывает: 1900-01-01 00: 00: 00.000 дает значение по умолчанию SQL-сервером. (Похоже, для меня все равно неинициализируется)

Ответ 6

Вот быстрый и легко читаемый способ получения минимального значения даты

Примечание. Это детерминированная функция, поэтому для дальнейшего повышения производительности мы могли бы также применить WITH SCHEMABINDING к возвращаемому значению.

Создать функцию

CREATE FUNCTION MinDate()
RETURNS DATETIME WITH SCHEMABINDING
AS
BEGIN
    RETURN CONVERT(DATETIME, -53690)

END

Вызовите функцию

dbo.MinDate()

Пример 1

PRINT dbo.MinDate()

Пример 2

PRINT 'The minimimum date allowed in an SQL database is ' + CONVERT(VARCHAR(MAX), dbo.MinDate())

Пример 3

SELECT * FROM Table WHERE DateValue > dbo.MinDate()

Пример 4

SELECT dbo.MinDate() AS MinDate

Пример 5

DECLARE @MinDate AS DATETIME = dbo.MinDate()

SELECT @MinDate AS MinDate

Ответ 7

Диапазон для datetime не изменится, поскольку это приведет к потере обратной совместимости. Таким образом, вы можете жестко его кодировать.

Ответ 8

Это то, что я использую, чтобы получить минимальную дату в SQL Server. Обратите внимание, что это глобализация:

CREATE FUNCTION [dbo].[DateTimeMinValue]()
RETURNS datetime
AS
BEGIN
  RETURN (SELECT
    CAST('17530101' AS datetime))
END

Вызов с использованием:

SELECT [dbo].[DateTimeMinValue]()