Функция SQL Server для возврата минимальной даты (1 января 1753 года)
Я ищу функцию SQL Server, чтобы вернуть минимальное значение для datetime, а именно 1 января 1753 года. Я бы предпочел не жестко кодировать это значение даты в моем скрипте.
существует ли что-нибудь подобное? (Для сравнения, в C#, я мог бы просто сделать DateTime.MinValue)
Или мне придется написать это самому?
Я использую Microsoft SQL Server 2008 Express.
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]()