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


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

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

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

8 69

8 ответов:

вы могли бы написать Пользовательская Функция это возвращает минимальное значение даты следующим образом:

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

использование

select dbo.DateTimeMinValue() as DateTimeMinValue

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

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

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

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

использовать select cast(-53690 as datetime) или Convert С указанным форматом даты и времени.

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

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

select cast('17530101' as datetime)

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

вот быстрый и очень читаемый способ получить минимальное значение даты

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

CREATE FUNCTION MinDate()
RETURNS DATETIME
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

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

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

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

вызов с помощью:

SELECT [dbo].[DateTimeMinValue]()