Datetimeの最小値、つまり1753年1月1日を返すSQL Server関数を探しています。その日付値をスクリプトにハードコーディングしたくないのです。
そのようなものはありますか? (比較のために、C#では、DateTime.MinValue)
を実行できましたが、それとも自分でこれを記述する必要がありますか?
Microsoft SQL Server 2008 Expressを使用しています。
次のように最小日付値を返す 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
SqlDateTimeオブジェクト を見ましたか? SqlDateTime.MinValue
を使用して最小日付を取得します(1753年1月1日)。
評判ポイントが不十分であるため、受け入れられた回答にコメントすることはできませんので、私のコメントは返信として送られます。
select cast('1753-1-1' as datetime)
の使用は、YYYY-MM-DD形式の日付文字列を受け入れない地域設定でデータベースで実行すると失敗するためです。
代わりに、select cast(-53690 as datetime)
またはConvert
を指定された日時形式で使用します。
地域の問題を回避するために、日付をネイティブ値'yyyymmdd'
として入力します。
select cast('17530101' as datetime)
はい、TSQLにMinDate() = '00010101'
があれば素晴らしいのですが、そのような運はありません。
1753年1月1日ではなく、cast( '' as datetime)を選択すると、1900-01-01 00:00:00.000がSQLサーバーのデフォルト値になります。 (とにかく私にはもっと初期化されていないように見える)
最小日付値を取得するための高速で読みやすい方法を次に示します
関数を作成する
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
datetime
の範囲は変更されません。下位互換性が損なわれるためです。そのため、ハードコーディングできます。
これは、SQL Serverで最小日付を取得するために使用するものです。グローバル化に対応していることに注意してください。
CREATE FUNCTION [dbo].[DateTimeMinValue]()
RETURNS datetime
AS
BEGIN
RETURN (SELECT
CAST('17530101' AS datetime))
END
を使用して呼び出します:
SELECT [dbo].[DateTimeMinValue]()