1. ホーム
  2. sql

[解決済み] varchar データ型から datetime データ型に変換すると、SQL クエリで範囲外の値が発生する

2022-01-29 16:28:16

質問

日付と時刻を格納するカラムを持つテーブルがあります。そのカラムから日付だけを取得するクエリを書く必要があります。

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

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

varchar データ型から datetime データ型への変換で、範囲外の値が発生しました。

カラムのデータは日付時間です。 日付だけを抽出し、時刻を削除する必要があります。 Logintime]カラムはデータタイム形式であることに注意してください。

どのように解決するのですか?

試す ISDATE() 関数をSQL Serverで実行します。1の場合、有効な日付を選択します。0なら、無効な日付を選択します。

SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)  
FROM AuditTrail 
WHERE ISDATE(LoginTime) = 1

EDIT :

あなたのアップデートに従って 日付のみを抽出し、時刻を削除する必要があります。 であれば、単純に内側の CONVERT

SELECT CONVERT(VARCHAR, LoginTime, 101) FROM AuditTrail 

または

SELECT LEFT(LoginTime,10) FROM AuditTrail

EDIT 2 :

エラーの主な原因は、WHERE句.ieの日付にあります。

SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)  
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <= 
CAST('06/18/2012' AS DATE)

とは異なります。

SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)  
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <= 
CAST('18/06/2012' AS DATE)

結論

EDIT 2 最初のクエリは mm/dd/yyyy フォーマットでフィルタリングしようとするのに対し、2番目のクエリは dd/mm/yyyy 形式を使用します。どちらかが失敗し、エラーをスローします。

varcharデータ型からdatetimeデータ型への変換は、以下のような結果になりました。 が範囲外の値になっています。

そのため、日付のフィルタリングを行う場合は、必ず mm/dd/yyyy または dd/mm/yyyy の形式を使用することができます。