0

日付のフォーマットは次のとおりです。

 XXXXXX001221

この日付は12月21日です

CURDATE()関数を使用して昨日のエントリを取得したい場合、これを行うにはどうすればよいですか?

4

2 に答える 2

1

月日だけを実行している場合(インデックスはCURDATE()の文字列形式(YYYY-MM-DD)に基づいています):

SELECT * FROM table_name
WHERE date_field LIKE
  CONCAT('%', SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 6 FOR 2),
              SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 9 FOR 2));

または、EXTRACT()を使用する別の方法:

SELECT * FROM table_name
WHERE date_field LIKE
  CONCAT('%', EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)),
              EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)));




年間も:

SELECT * FROM table_name
WHERE date_field LIKE
  CONCAT('%', SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 3 FOR 2),
              SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 6 FOR 2),
              SUBSTR(DATE_SUB(CURDATE(), INTERVAL 1 DAY) FROM 9 FOR 2));


SELECT * FROM table_name
WHERE date_field LIKE
  CONCAT('%', EXTRACT(YEAR FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)),
              EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)),
              EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)));




編集:あなたの代わりにcodethisの答えで述べられているようにWHERE date_field LIKE ...使うことができます:WHERE RIGHT(date_field, 6) = ...

SELECT * FROM table_name
WHERE RIGHT(date_field, 4) =
  CONCAT(EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)),
         EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)));

SELECT * FROM table_name
WHERE RIGHT(date_field, 6) =
  CONCAT(EXTRACT(YEAR FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)),
         EXTRACT(MONTH FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)),
         EXTRACT(DAY FROM DATE_SUB(CURDATE(), INTERVAL 1 DAY)));

注:変数を使用して、DATE_SUB(CURDATE()、INTERVAL 1 DAY)の計算を常に節約することもできます。

SET @yesterday = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
SELECT ...
于 2010-12-22T00:52:48.483 に答える
0

次のようなものを試してください:

SELECT * FROM table WHERE RIGHT(date_col, 6) = (SELECT CONVERT(VARCHAR(6), GETDATE()-1, 12) AS [YYMMDD])
于 2010-12-22T00:53:05.390 に答える