SQL Server function to return minimum date (January 1, 1753)

前端 未结 8 636
生来不讨喜
生来不讨喜 2021-02-01 11:43

I am looking for a SQL Server function to return the minimum value for datetime, namely January 1, 1753. I\'d rather not hardcode that date value into my script.

Does an

相关标签:
8条回答
  • 2021-02-01 12:04

    Here is a fast and highly readable way to get the min date value

    Note: This is a Deterministic Function, so to improve performance further we might as well apply WITH SCHEMABINDING to the return value.

    Create a function

    CREATE FUNCTION MinDate()
    RETURNS DATETIME WITH SCHEMABINDING
    AS
    BEGIN
        RETURN CONVERT(DATETIME, -53690)
    
    END
    

    Call the function

    dbo.MinDate()
    

    Example 1

    PRINT dbo.MinDate()
    

    Example 2

    PRINT 'The minimimum date allowed in an SQL database is ' + CONVERT(VARCHAR(MAX), dbo.MinDate())
    

    Example 3

    SELECT * FROM Table WHERE DateValue > dbo.MinDate()
    

    Example 4

    SELECT dbo.MinDate() AS MinDate
    

    Example 5

    DECLARE @MinDate AS DATETIME = dbo.MinDate()
    
    SELECT @MinDate AS MinDate
    
    0 讨论(0)
  • 2021-02-01 12:04

    The range for datetime will not change, as that would break backward compatibility. So you can hard code it.

    0 讨论(0)
  • 2021-02-01 12:05

    This is what I use to get the minimum date in SQL Server. Please note that it is globalisation friendly:

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

    Call using:

    SELECT [dbo].[DateTimeMinValue]()
    
    0 讨论(0)
  • 2021-02-01 12:07

    It's not January 1, 1753 but select cast('' as datetime) wich reveals: 1900-01-01 00:00:00.000 gives the default value by SQL server. (Looks more uninitialized to me anyway)

    0 讨论(0)
  • 2021-02-01 12:12

    You could write a User Defined Function that returns the min date value like this:

    select cast(-53690 as datetime)
    

    Then use that function in your scripts, and if you ever need to change it, there is only one place to do that.

    Alternately, you could use this query if you prefer it for better readability:

    select cast('1753-1-1' as datetime)
    

    Example Function

    create function dbo.DateTimeMinValue()
    returns datetime as
    begin
        return (select cast(-53690 as datetime))
    end
    

    Usage

    select dbo.DateTimeMinValue() as DateTimeMinValue
    
    DateTimeMinValue
    -----------------------
    1753-01-01 00:00:00.000
    
    0 讨论(0)
  • 2021-02-01 12:14

    Have you seen the SqlDateTime object? use SqlDateTime.MinValue to get your minimum date (Jan 1 1753).

    0 讨论(0)
提交回复
热议问题