1

アプリケーションがこのクエリ (yyyy/mm/dd) を使用してデータを挿入しようとすると:

INSERT INTO Inv_Dueno_Equipo (Cod_Usuario, Fecha_Inicio, Fecha_Termino, Codigo_Equipo)
VALUES (1, '2012/01/26', '2012/01/31', 1);

エラーが発生する

データ型 varchar から datetime への変換で、範囲外の値が生成されました。

しかし、クエリを ( yyyy/dd/mm)に変更すると

INSERT INTO Inv_Dueno_Equipo (Cod_Usuario, Fecha_Inicio, Fecha_Termino, Codigo_Equipo)
VALUES (1, '2012/26/01', '2012/31/01', 1);

データが挿入されます。yyyy/mm/ddフォーマットを機能させるために構成を変更する必要がある場合、これを修正するにはどうすればよいですか?

ありがとう

4

2 に答える 2

8

SQL Server はDateTime任意の文字列形式で a を保存しません。これは 8 バイトの数値として保存されます。

さまざまな設定 (言語、日付形式)DateTimeは、SQL Server Management Studio での の表示方法、または文字列を に変換する際の解析方法にのみ影響しますDateTime

SQL Server では多くの形式がサポートされています。CAST および CONVERT については、MSDN Books Online を参照してください。これらの形式のほとんどは、使用している設定に依存します。したがって、これらの設定が機能する場合と機能しない場合があります。

これを解決する方法は、SQL Server でサポートされている (少し変更された) ISO-8601 日付形式を使用することです。この形式は、SQL Server の言語と日付形式の設定に関係なく、常に機能します。

ISO-8601 形式は SQL Server でサポートされており、次の 2 つの形式があります。

  • YYYYMMDD日付のみ (時間部分なし)。ここに注意してください:ダッシュはありません! 、それは非常に重要です! SQL Server の dateformat 設定とは無関係ではなく、すべての状況で機能するとは限りYYYY-MM-DDませ!

また:

  • YYYY-MM-DDTHH:MM:SS日付と時刻 - ここに注意してください: この形式にはダッシュ (ただし、省略可能T) があり、DATETIME.

これは、SQL Server 2000 以降で有効です。

SQL Server 2008 以降とDATEデータ型 (のみDATE-ではなく DATETIME!) を使用する場合、実際にYYYY-MM-DD形式も使用でき、SQL Server の任意の設定でも機能します。

なぜこのトピック全体が非常にトリッキーでやや混乱するのか、私に聞かないでください。ただし、このYYYYMMDD形式では、SQL Server のどのバージョンでも、SQL Server の言語と日付形式の設定でも問題ありません。

したがって、具体的なケースでは、次を使用してみてください。

INSERT INTO Inv_Dueno_Equipo (Cod_Usuario,Fecha_Inicio,Fecha_Termino,Codigo_Equipo)
VALUES (1, '20120126', '20120131', 1);

そして、あなたはそれで大丈夫なはずです。

于 2013-04-15T15:51:12.363 に答える
0

変換機能

INSERT INTO Inv_Dueno_Equipo (Cod_Usuario,Fecha_Inicio,Fecha_Termino,Codigo_Equipo) VALUES (1,convert('2012/01/26',103),convert('2012/01/31',103),1);

http://www.w3schools.com/sql/func_convert.asp リンクを参照し、必要に応じてスタイル パラメータを使用してください。

于 2013-04-15T15:52:36.300 に答える