次のコンポーネントを考える
DECLARE @D DATE = '2013-10-13'
DECLARE @T TIME(7) = '23:59:59.9999999'
それらを組み合わせてDATETIME2(7)
価値のある結果を生成する最良の方法は何'2013-10-13 23:59:59.9999999'
ですか?
動作しないものを以下にリストします。
SELECT @D + @T
オペランドデータ型の日付は、追加演算子には無効です。
SELECT CAST(@D AS DATETIME2(7)) + @T
オペランドのデータ型datetime2は、add演算子には無効です。
SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D)
datediff関数の結果、オーバーフローが発生しました。2つの日付/時刻インスタンスを分離する日付部分の数が多すぎます。精度の低い日付部分でdatediffを使用してみてください。
*を使用して、Azure SQL DatabaseおよびSQL Server 2016でオーバーフローを回避できますDATEDIFF_BIG
。
SELECT CAST(@D AS DATETIME) + @T
日付と時刻のデータ型は、add演算子と互換性がありません。
SELECT CAST(@D AS DATETIME) + CAST(@T AS DATETIME)
結果を返しますが、精度を失います
2013-10-13 23:59:59.997