Функция 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]()