0

私はこのコードを持っています:

DECLARE @StartDate nvarchar
SET @StartDate='22/10/2014'
SELECT CAST (@StartDate as datetime)

そして、それは私にこのエラーを与えます:

文字列から日時を変換する際に変換に失敗しました。

誰もがこれを行うためのより良い方法/少なくともエラーのない方法を提案できますか?

4

2 に答える 2

5

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

これを解決する方法は、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 の言語と日付形式の設定でも問題ありません。

SQL Server 2008 以降の推奨事項はDATE、日付部分のみが必要で、DATETIME2(n)日付と時刻の両方が必要な場合に使用することです。DATETIME可能であれば、データ型の段階的廃止を開始するようにしてください。

于 2014-05-16T14:37:10.387 に答える
2

表す文字列を日付形式に変換するには、dd/mm/yyyy次を使用できます。

DECLARE @StartDate nvarchar(10)
SET @StartDate='22/10/2014'     
SELECT CONVERT(datetime, @StartDate, 103)

宣言varcharとは、長さを 1 に設定することを意味します。

于 2014-05-16T14:34:50.790 に答える