web-dev-qa-db-ja.com

最小日付を返すSQL Server関数(1753年1月1日)

Datetimeの最小値、つまり1753年1月1日を返すSQL Server関数を探しています。その日付値をスクリプトにハードコーディングしたくないのです。

そのようなものはありますか? (比較のために、C#では、DateTime.MinValue)を実行できましたが、それとも自分でこれを記述する必要がありますか?

Microsoft SQL Server 2008 Expressを使用しています。

82
Jeremy

次のように最小日付値を返す ser Defined Function を記述できます。

select cast(-53690 as datetime)

次に、スクリプトでその関数を使用します。変更する必要がある場合、それを行う場所は1つだけです。

また、読みやすくするためにこのクエリを使用することもできます。

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
84
RedFilter

SqlDateTimeオブジェクト を見ましたか? SqlDateTime.MinValueを使用して最小日付を取得します(1753年1月1日)。

23
Naeem Sarfraz

評判ポイントが不十分であるため、受け入れられた回答にコメントすることはできませんので、私のコメントは返信として送られます。

select cast('1753-1-1' as datetime)の使用は、YYYY-MM-DD形式の日付文字列を受け入れない地域設定でデータベースで実行すると失敗するためです。

代わりに、select cast(-53690 as datetime)またはConvertを指定された日時形式で使用します。

13
Rune Andersen

地域の問題を回避するために、日付をネイティブ値'yyyymmdd'として入力します。

select cast('17530101' as datetime)

はい、TSQLにMinDate() = '00010101'があれば素晴らしいのですが、そのような運はありません。

5
Frank Gillich

1753年1月1日ではなく、cast( '' as datetime)を選択すると、1900-01-01 00:00:00.000がSQLサーバーのデフォルト値になります。 (とにかく私にはもっと初期化されていないように見える)

4
Tomas Hesse

最小日付値を取得するための高速で読みやすい方法を次に示します

関数を作成する

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())

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

例4

SELECT dbo.MinDate() AS MinDate

例5

DECLARE @MinDate AS DATETIME = dbo.MinDate()

SELECT @MinDate AS MinDate
2

datetimeの範囲は変更されません。下位互換性が損なわれるためです。そのため、ハードコーディングできます。

0
Andomar

これは、SQL Serverで最小日付を取得するために使用するものです。グローバル化に対応していることに注意してください。

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

を使用して呼び出します:

SELECT [dbo].[DateTimeMinValue]()
0
CarneyCode