質問

やあみんな、私はM/D/Yとして保存され、期限切れになっているREC_DATE(VARCHAR)を持っているデータベースからすべてのレコードを取得しようとしています(そのように、以下 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'

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

役に立ちましたか?

解決

Zerkmsには、可能な限り適切なデータ型を使用する必要があることに同意します。それ以外の場合は、SubQueryを使用して、文字列/Varcharを最初に日付/時刻データ型に変換する必要があります。

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()

他のヒント

正しい方法 - 適切なフィールドタイプにデータを保存することです。 「varchar」の代わりに「日付」タイプを使用します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top