最近、データベースを別のサーバーに移行したため、日付形式のクエリが何らかの形で変更されたと思います。
以前は、次のように使用できました。
SELECT * FROM table WHERE date > 'YYYY-MM-DD'
ただし、今は使用する必要があります..
SELECT * FROM table WHERE date > 'YYYY-DD-MM'
以前のバージョンに戻すために何を変更する必要があるか教えてもらえますか?
最近、データベースを別のサーバーに移行したため、日付形式のクエリが何らかの形で変更されたと思います。
以前は、次のように使用できました。
SELECT * FROM table WHERE date > 'YYYY-MM-DD'
ただし、今は使用する必要があります..
SELECT * FROM table WHERE date > 'YYYY-DD-MM'
以前のバージョンに戻すために何を変更する必要があるか教えてもらえますか?
これを試してみてください -
クエリ:
SET DATEFORMAT ymd
現在の設定を読み取る:
DBCC USEROPTIONS
出力:
Set Option Value
-------------------------- -----------------
...
language us_english
dateformat ymd
...
文字列に異なる形式を使用している場合、この動作を回避できます。
常に固有の iso 形式が 2 つあります。SQL サーバーは、サーバーの日付形式の設定に関係なく、常に同じ方法でそれらを解析します。
これらは:
1) 短縮形: YYYYMMDD. 例 '20120301' -- 2012 年 3 月 1 日
2) 長い形式: YYYY-MM-DDTHH:MM:SS.msms'. 例 '2012-03-01T12:13:00.000Z' -- 2012 年 3 月 1 日午後 12 時 13 分
長い形式では、ミリ秒はオプションです。これは完全に受け入れ可能な ISO 日時 '2012-03-01T12:13:00Z' です。
末尾の Z はタイムゾーン情報です。SQL Server は実際にはこれを必要としません。(他の製品はもう少し厳しいですが)
たとえば、これを試してください:
DECLARE @foo DATETIME
SET DATEFORMAT DMY
-- this will be the 3rd of january in DMY
SET @foo = '2012-03-01'
SELECT 'DMY: Not ISO', @foo
SET @foo = '20120301'
SELECT 'DMY: ISO', @foo
SET DATEFORMAT MDY
-- this will be the 1st of March in MDY
SET @foo = '2012-03-01'
SELECT 'MDY: not ISO', @foo
SET @foo = '20120301'
SELECT 'MDY: ISO', @foo
テキストを使用して日付を入力する場合は、常に2 つの ISO 標準のいずれかを使用するようにしてください。それは物事をより決定論的にするだけです。
短い形式 (SQL Server) http://msdn.microsoft.com/en-US/library/ms187085(v=sql.90).aspx
ISO 8601 形式 (SQL Server) http://msdn.microsoft.com/en-us/library/ms190977(v=sql.90).aspx
それは言語/文化の問題です
Set Language 'us_english'