0

testというmysqlテーブルがあります。構造コードを以下に示します。

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `assigned_date` date NOT NULL
) ENGINE=InnoDB

そして、テーブルには次のデータが含まれています。

INSERT INTO `test` (`id`, `name`, `assigned_date`) VALUES
(0, 'A', '2012-12-23'),
(0, 'B', '2012-12-25');

ここで問題となるのは、次のクエリを実行しても行が返されないことです。

SELECT name 
FROM test 
WHERE 
     DATE_FORMAT(assigned_date, '%m/%d/%Y') >= '12/01/2012'
     AND 
     DATE_FORMAT(assigned_date, '%m/%d/%Y') <= '01/02/2013'

しかし、次のコマンドを使用すると、期待どおりに2行が返されます。

SELECT name 
FROM test 
WHERE
     assigned_date >= STR_TO_DATE('12/01/2012', '%m/%d/%Y')
     AND 
     assigned_date  <= STR_TO_DATE('01/02/2013', '%m/%d/%Y')

違いはなんですか ?DATE_FORMATが機能しなかったのはなぜですか?

これを手伝ってください私はサイト全体でdate_format関数を使用しました。今、私はサイト全体を更新しなければならないようです。

ありがとう。

4

3 に答える 3

11

DATE_FORMATDATEをSTRINGに変換します。

STR_TO_DATESTRINGをDATEに変換します。

MySQLDocsから

于 2013-01-02T10:11:35.583 に答える
2

DATE_FORMATは、assigned_dateをmm / dd / yyyy形式の文字列に変換し、その文字列を2つの文字列定数と比較しているため、機能しませんでした- >=12から始まる文字列および<=から始まる文字列はありません01。

于 2013-01-02T10:20:24.417 に答える
0

DATE_FORMAT()関数は、フォーマットマスクで指定された日付をフォーマットします。

DATE_FORMAT(date, format_mask)
Example:
SELECT DATE_FORMAT("2017-06-15", "%M %d %Y");
SELECT DATE_FORMAT(BirthDate, "%W %M %e %Y") FROM Employees;

MySQL STR_TO_DATE()は、文字列と特定のフォーマット文字列を引数として取り、日時値を返します。

STR_TO_DATE(str,format);
Example:
SELECT STR_TO_DATE('18,05,2009','%d,%m,%Y');
SELECT STR_TO_DATE('May 18, 2009','%M %d,%Y');
于 2017-10-24T06:35:49.603 に答える