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