datetimeの最小値、つまり1753年1月1日を返すSQL Server関数を探しています。その日付の値をスクリプトにハードコーディングしたくないのです。
そのようなものはありますか?(比較のために、C#では、私は単にそれを行うことができますDateTime.MinValue)
か、またはこれを自分で書く必要がありますか?
Microsoft SQL Server 2008 Expressを使用しています。
datetimeの最小値、つまり1753年1月1日を返すSQL Server関数を探しています。その日付の値をスクリプトにハードコーディングしたくないのです。
そのようなものはありますか?(比較のために、C#では、私は単にそれを行うことができますDateTime.MinValue)
か、またはこれを自分で書く必要がありますか?
Microsoft SQL Server 2008 Expressを使用しています。
CONVERT(smalldatetime, 0)
のためにsmalldatetime
。
回答:
次のような最小日付値を返すユーザー定義関数を書くことができます:
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
'1753-1-1'
は、より優れています-53690
cast('17530101' as datetime)
ように、地域の問題も回避され、-53690よりも読みやすくなります。
SqlDateTimeオブジェクトを見ましたか?SqlDateTime.MinValue
最小日付(1753年1月1日)を取得するために使用します。
評判ポイントが不十分なため、受け入れられた回答についてコメントすることができないので、私のコメントは返信として送信されます。
select cast('1753-1-1' as datetime)
YYYY-MM-DD形式の日付文字列を受け入れない地域設定のデータベースで実行すると、これを使用すると失敗します。
代わりに、指定された日時形式のselect cast(-53690 as datetime)
またはを使用してくださいConvert
。
これは、最小の日付値を取得するための高速で読みやすい方法です
注:これは確定関数であるため、パフォーマンスをさらに向上させるために、戻り値にWITH SCHEMABINDINGを適用することもできます。
関数を作成する
CREATE FUNCTION MinDate()
RETURNS DATETIME WITH SCHEMABINDING
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
1753年1月1日ではありませんが、選択したキャスト( ''日時として)を選択すると、1900-01-01 00:00:00.000がSQLサーバーによってデフォルト値になります。(とにかく私には初期化されていないように見えます)
SELECT CONVERT(DATETIME, 0)
できる値)ですが、SQLサーバーで日時が保持できる実際の最小値は、実際には1753年のOPによるものです。アメリカはまた、グレゴリオ暦への切り替えとSQL Serverが抜け等日間に対処する必要はありませんということSELECT CONVERT(DATETIME, -53690)
なります1753-01-01 00:00:00.000
とSELECT CONVERT(DATETIME, -53691)
、オーバーフローに関するエラーが発生します。
の範囲datetime
は変更されません。下位互換性が失われるためです。だから、あなたはそれをハードコーディングすることができます。
convert
いますがGetMinDate()
、関数の定義に飛び込む必要があるからです。したがって、コードを維持する必要がある場合は、convert
バリアントを使用します。
convert
、の重要性を必ずしも知っているとは限りません1753-1-1
。