私はこのコードを持っています:
DECLARE @StartDate nvarchar
SET @StartDate='22/10/2014'
SELECT CAST (@StartDate as datetime)
そして、それは私にこのエラーを与えます:
文字列から日時を変換する際に変換に失敗しました。
誰もがこれを行うためのより良い方法/少なくともエラーのない方法を提案できますか?
私はこのコードを持っています:
DECLARE @StartDate nvarchar
SET @StartDate='22/10/2014'
SELECT CAST (@StartDate as datetime)
そして、それは私にこのエラーを与えます:
文字列から日時を変換する際に変換に失敗しました。
誰もがこれを行うためのより良い方法/少なくともエラーのない方法を提案できますか?
SQL Server では多くの形式がサポートされています。MSDN Books Online を参照しCAST
てCONVERT
ください。これらの形式のほとんどは、使用している設定に依存します。したがって、これらの設定が機能する場合と機能しない場合があります。
これを解決する方法は、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
可能であれば、データ型の段階的廃止を開始するようにしてください。
表す文字列を日付形式に変換するには、dd/mm/yyyy
次を使用できます。
DECLARE @StartDate nvarchar(10)
SET @StartDate='22/10/2014'
SELECT CONVERT(datetime, @StartDate, 103)
宣言varchar
とは、長さを 1 に設定することを意味します。