0

こんにちは、データベースから rec_date (varchar) が m/d/Y として保存され、有効期限が切れているすべてのレコードを取得しようとしています (以下のcurdate()ように)。欲しいです:

SELECT member_id, 
       status, 
       DATE_FORMAT(STR_TO_DATE(rec_date, '%m/%d/%Y'), '%Y-%m-%d') AS rec
  FROM members 
 WHERE rec_date > CURDATE() 
   AND status = '1'

私は明らかに何か間違ったことをしているので、助けてもらえますか?

4

2 に答える 2

0

可能な限り適切なデータ型を使用する必要があるというzerkmsに同意します。それ以外の場合は、サブクエリを使用して、最初に文字列/varcharをDATE/TIMEデータ型に変換する必要があります。

SELECT x.member_id,
       x.status,
       DATE_FORMAT(x.rec_dt, '%Y-%m-%d')
  FROM (SELECT m.member_id,
               m.status,
               STR_TO_DATE(m.rec_date, '%m/%d/%Y') AS rec_dt
          FROM MEMBERS m
         WHERE m.status = '1') x
 WHERE x.rec_dt < CURDATE()
于 2010-03-15T04:07:08.100 に答える
0

正しい方法は、データを適切なフィールド タイプに格納することです。「varchar」の代わりに「date」型を使用してください。

とにかく - DATE_FORMAT を使用して rec_date を WHERE 句の文字列にフォーマットし、それを CURDATE() と比較できます。

于 2010-03-15T03:57:45.733 に答える