8

うまくいけば、これは簡単です。

以下は機能しません:

DECLARE @stringDate nvarchar(50)
SET @stringDate = '0001-01-01T12:00:00'

SELECT 
    @stringDate AS StringDate,
    CONVERT(datetime, @stringDate, 126) AS ConvertedDate

エラーが発生します:nvarcharデータ型を日時データ型に変換すると、値が範囲外になりました。

変換を達成する最も簡単な方法は何ですか?

ありがとう

4

2 に答える 2

9

タイプDatetimeは0001年をサポートしていません。サポートされる範囲は1753〜9999です。回避策として、代わりに
タイプを使用できます。DateTime2

SELECT 
    @stringDate AS StringDate,
    CONVERT(datetime2, @stringDate, 126) AS ConvertedDate
于 2012-04-18T10:59:39.547 に答える
6

データDATETIMEの場合、

日付範囲は、1753年1月1日から9999年12月31日までです。

新しいデータ型DATETIME2を使用する必要があります:

SET ANSI_WARNINGS OFF;  --Not recommended
SET ARITHABORT OFF;     --Not recommended
DECLARE @stringDate nvarchar(50)
SET @stringDate = '0001-01-01T12:00:00'

SELECT 
    @stringDate AS StringDate,
    CONVERT(datetime, @stringDate, 126) AS Converted_DATETIME,
    CONVERT(datetime2, @stringDate, 126) AS Converted_DATETIME2_A,
    CONVERT(datetime2(0), @stringDate, 126) AS Converted_DATETIME2_B

結果:

StringDate          Converted_DATETIME Converted_DATETIME2_A  Converted_DATETIME2_B
------------------- ------------------ ---------------------- ----------------------
0001-01-01T12:00:00 NULL               0001-01-01 12:00:00.00 0001-01-01 12:00:00
Arithmetic overflow occurred.

注:DATETIME2日付/時刻の値に「小数秒の精度」がない場合は、データ型のデフォルトの精度を変更できますDATETIME2(0)

于 2012-04-18T11:00:45.177 に答える