SQL Server函数返回最小日期(1753年1月1日)

时间:2010-09-29 21:11:41

标签: sql-server datetime function

我正在寻找一个SQL Server函数来返回datetime的最小值,即1753年1月1日。我宁愿不将该日期值硬编码到我的脚本中。

有这样的事吗? (为了比较,在C#中,我可以做DateTime.MinValue) 或者我自己要写这个吗?

我正在使用Microsoft SQL Server 2008 Express。

8 个答案:

答案 0 :(得分:80)

您可以编写一个User Defined Function来返回最小日期值,如下所示:

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

答案 1 :(得分:22)

你见过SqlDateTime object吗?使用SqlDateTime.MinValue获取最短日期(1753年1月1日)。

答案 2 :(得分:13)

由于我不能评论由于insufficeint声誉点而接受的答案,我的评论是作为回复。

如果在区域设置不接受YYYY-MM-DD格式的日期字符串的数据库上运行,则使用select cast('1753-1-1' as datetime)

会失败。

而是使用指定日期时间格式的select cast(-53690 as datetime)Convert

答案 3 :(得分:4)

输入日期作为原生值select cast('17530101' as datetime) 以避免地区问题:

MinDate() = '00010101'

是的,如果TSQL有validateData(),那就太好了,但没有这样的运气。

答案 4 :(得分:4)

它不是1753年1月1日,而是选择演员表(&#39;&#39;作为日期时间),显示:1900-01-01 00:00:00.000由SQL服务器提供默认值。 (无论如何,对我来说看起来更加未初始化)

答案 5 :(得分:1)

这是获取最小日期值的快速且高度可读的方法

创建功能

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

答案 6 :(得分:0)

datetime的范围不会改变,因为这会破坏向后兼容性。所以你可以硬编码。

答案 7 :(得分:0)

这是我用来获取SQL Server中的最小日期。请注意,它是全球化友好的:

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

使用以下方式致电:

SELECT [dbo].[DateTimeMinValue]()