5

最近、データベースを別のサーバーに移行したため、日付形式のクエリが何らかの形で変更されたと思います。

以前は、次のように使用できました。

SELECT * FROM table WHERE date > 'YYYY-MM-DD'

ただし、今は使用する必要があります..

SELECT * FROM table WHERE date > 'YYYY-DD-MM'

以前のバージョンに戻すために何を変更する必要があるか教えてもらえますか?

4

4 に答える 4

2

これを試してみてください -

クエリ:

SET DATEFORMAT ymd

現在の設定を読み取る:

DBCC USEROPTIONS

出力:

Set Option                 Value
-------------------------- -----------------
...
language                   us_english
dateformat                 ymd
...
于 2013-07-09T11:40:49.607 に答える
2

文字列に異なる形式を使用している場合、この動作を回避できます。

常に固有の 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

于 2013-07-09T12:16:25.973 に答える
0

それは言語/文化の問題です

Set Language 'us_english'
于 2013-07-09T11:40:43.600 に答える