1

ばかげた質問かもしれませんが、明確にしたかったのです。次のような日付パラメーターを持つスクリプトを作成しました。

DECLARE @dateparam as datetime
SET @dateparam = '01-01-2013 00:00:00'

日付文字列が「正しい」形式でなくても、テストすると機能しているように見えますyyyy-MM-dd hh:mm:ss。コンピューターの地域設定を英語に変更しましたが、スクリプトは依然として本来の機能を果たしました。

これは、コンピューターにある SQL Server 2008 R2 が日付を変換する方法を知っているためですか、それとも私が使用したような日付形式を使用すると問題が発生する可能性がありますか?

4

2 に答える 2

3

変換によって、どれが月でどれが日であるか01-01-2013などの問題は明らかになりません。01

安全なフォーマットではありません。

安全な形式 (datetimeではなくに変換する場合datetime2) は次のとおりです。

YYYYMMDD                               20121201
YYYY-MM-DD'T'hh:mm:ss                  2012-12-01T10:43:29
YYYY-MM-DD'T'hh:mm:ss.mil              2012-12-01T10:43:29.337

それらとそれらだけに固執します。(例はすべて 2012 年 12 月 1 日のものです)

または、できれば日付を文字列として扱わないほうがよいでしょう。たとえば、.NET コードから SQL Server を呼び出す場合は、その日付をDateTimes としてコードに保持し、ADO.NET と SQL Server に必要な変換を処理させて、それらdatetimeを s に変換します。文字列。

于 2012-12-12T07:19:55.050 に答える
1

日付のように見えるものから暗黙の変換を行っていますが、事実は文字列 ( '01-01-2013 00:00:00') です。SQL Server を信頼して文字列の形式を正しく推測するのではなく、形式を指定して変換を明示的に行う必要があります。

これは、(CAST ではなく) CONVERT を使用して「スタイル」を指定することで実行できます。さまざまなスタイルがhttp://msdn.microsoft.com/en-us/library/ms187928.aspxにリストされています。

于 2012-12-12T07:42:00.807 に答える