我正在寻找一个SQL Server函数来返回datetime的最小值,即1753年1月1日。我宁愿不将该日期值硬编码到我的脚本中。
有这样的事吗? (为了比较,在C#中,我可以做DateTime.MinValue)
或者我自己要写这个吗?
我正在使用Microsoft SQL Server 2008 Express。
答案 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]()