sql >> データベース >  >> RDS >> Sqlserver

SELECT CASE CAST 変換エラー

    CASE 式でデータ型を混在させることはできません (または、少なくともそれらが暗黙的に OK をキャストすることに注意しないと)

    次のようなステートメントに直面すると、SQL Server はデータ型の優先順位を使用して、式の全体的なデータ型を決定します

    SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
    

    上記の datetime の場合 char より優先度が高い そのため、暗黙的に文字列を失敗する日付にキャストします。

    ただし、以下は sql_variant として成功します 優先順位が高い

    SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
    

    したがって、そのように複数の混合データ型を返すことができます (sql_variant がどれほど簡単かはわかりません) ただし、使用する必要があります)

    それ以外は、NULL を返すことができます 意味のないデータを返す代わりに、無効な日時を返すか、返す必要がある場合はすべてを文字列にキャストします。




    1. MySQL-グループ内の最大値に一致するようにすべてのレコードを更新

    2. SQL Server RAISERRORとは何ですか?

    3. Oracleを使用する場合、Fluent NHibernateを使用してバッチフェッチを実装するにはどうすればよいですか?

    4. インメモリデータベースを備えたレール