web-dev-qa-db-ja.com

varcharデータ型をdatetimeデータ型に変換すると、SQLクエリで範囲外の値が発生する

日付と時刻を格納する列を持つテーブルがあります。その列から日付のみを取得するクエリを作成する必要があります。

SELECT CAST(CONVERT(VARCHAR, LoginTime, 101) AS datetime) FROM AuditTrail 

しかし、クエリを実行すると、次のエラーが発生します。

Varcharデータ型をdatetimeデータ型に変換すると、範囲外の値が発生しました。

列のデータは日時です。例:2012-06-18 12:08:04.000日付のみを抽出して時間を削除する必要があります。[Logintime]列はdatatime形式です。

2
Noora

この質問の答えでわかるように、 varcharデータ型からdatetimeデータ型への変換の結果、範囲外の値が発生しました

-- set the dateformat for the current session
set dateformat dmy

-- The conversion of a varchar data type 
-- to a datetime data type resulted in an out-of-range value.
select cast('2017-08-13 16:31:31'  as datetime)

-- get the current session date_format
select date_format
from sys.dm_exec_sessions
where session_id = @@spid

-- set the dateformat for the current session
set dateformat ymd

-- this should work
select cast('2017-08-13 16:31:31'  as datetime)
0