データが日付である列からデータを選択するクエリがあります。問題は、データにテキストと日付が混在していることです。
この SQL のビットは、最長のテキスト フィールドのみを返します。
SELECT MAX(field_value)
日付が発生する場所は、常に xx/xx/xxxx の形式です。
最新の日付を選択しようとしています。
私はMS SQLを使用しています。
誰でも助けることができますか?
データが日付である列からデータを選択するクエリがあります。問題は、データにテキストと日付が混在していることです。
この SQL のビットは、最長のテキスト フィールドのみを返します。
SELECT MAX(field_value)
日付が発生する場所は、常に xx/xx/xxxx の形式です。
最新の日付を選択しようとしています。
私はMS SQLを使用しています。
誰でも助けることができますか?
変換エラーなしでこれを行うには:
select max(case when isdate(col) = 1 then cast(col as date) end) -- or use convert()
from . . .
SQL ステートメントは、操作の順序を指定しません。したがって、where
サブクエリに句を含めても、日付のみが変換されることは保証されません。実際、SQL Server オプティマイザーは、データが取り込まれたときに変換を行い、その後でフィルター処理を行うほど「スマート」です。
操作の順序付けを保証する唯一の操作はcase
ステートメントであり、それには例外もあります。
別の解決策は、WHERE 句で PATINDEX を使用することです。
SELECT PATINDEX('[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]', field_value)
このアプローチの問題点は、何かが日付かどうか本当にわからないことです (たとえば、99/99/9999 は日付ではありません)。IS_DATE の問題は、構成 (DATEFORMAT など) に依存することです。したがって、適切なオプションを使用してください。