我正在寻找一个SQL Server函数来返回日期时间的最小值,即1753年1月1日。我不希望将该日期值硬编码到脚本中。
有没有类似的东西存在?(为了进行比较,在C#中,我可以这样做,DateTime.MinValue)
还是我必须自己写这个?
我正在使用Microsoft SQL Server 2008 Express。
我正在寻找一个SQL Server函数来返回日期时间的最小值,即1753年1月1日。我不希望将该日期值硬编码到脚本中。
有没有类似的东西存在?(为了进行比较,在C#中,我可以这样做,DateTime.MinValue)
还是我必须自己写这个?
我正在使用Microsoft SQL Server 2008 Express。
CONVERT(smalldatetime, 0)
的smalldatetime
。
Answers:
您可以编写一个用户定义函数,以返回最小日期值,如下所示:
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
'1753-1-1'
则比-53690
cast('17530101' as datetime)
这还将避免区域性问题,并且比-53690更具可读性。
您看过SqlDateTime对象吗?用于SqlDateTime.MinValue
获取您的最短日期(1753年1月1日)。
这是一种获取最小日期值的快速且易读的方法
注意:这是一个确定性函数,因此,为了进一步提高性能,我们不妨将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
不是1753年1月1日,而是选择cast(''作为datetime)来显示:1900-01-01 00:00:00.000给出了SQL Server的默认值。(反正我看起来还没有初始化)
SELECT CONVERT(DATETIME, 0)
),但是datetime在SQL Server中可以保留的实际最小值实际上是OP编写的1753年。那时美国也改用公历日历,而SQL Server不必处理丢失的日期等。SELECT CONVERT(DATETIME, -53690)
给出1753-01-01 00:00:00.000
并SELECT CONVERT(DATETIME, -53691)
给出有关溢出的错误。