none
smalldatetime型に変換できるかをチェックしたい RRS feed

  • 質問

  • SQLServer2012を使用しております。

    nvarchar(10)型の列の値がsmalldatetime型に変換できるかを確認したいと考えています。

    select 
    case when isdate('1899/12/31') = 0 then null
    	else iif(TRY_PARSE('1999/12/31' AS smalldatetime using 'ja-JP') is not null, getdate(), null)
    end as ymd

    上記はgetdate()の値が戻ります。

    select 
    case when isdate('1899/12/31') = 0 then null
    	else iif(TRY_PARSE('1899/12/31' AS smalldatetime using 'ja-JP') is not null, getdate(), null)
    end as ymd

    TRY_PARSEの日付を'1899/12/31'にすると

    メッセージ 6521、レベル 16、状態 1、行 31
    ステートメントを実行中に .NET Framework エラーが発生しました: 
    System.InvalidCastException: 指定されたキャストは有効ではありません。
    System.InvalidCastException: 
       場所 System.Data.SqlServer.Internal.CXVariantBase.SqlDateTimeToSmallDate(SqlDateTime sdt)
       場所 System.Data.SqlServer.Internal.CXVariantBase.DateTimeToSmallDate(DateTime dt)

    とエラーになります。

    smalldatetime型に変換できないのだから、nullが返ってほしいのですがエラーになります。

    nullを返すためには、どのような構文になりますでしょうか。



    • 編集済み TwSoft 2016年12月15日 1:00
    2016年12月15日 0:59

回答

すべての返信