0

データベースに varchar 型の datecreated フィールドがあります。残念ながら、このフィールドを日付形式に変更することはできないため、データを選択するときに変更する必要があります。日付に従ってレコードをソートしようとしています(最新の年、月、日、時、分、秒が表示されるように)。フィールド形式はこの dd-mm-yyyy hh:mm:ss のように見えるため、クエリでは次のことを試みていますが、順序付けはまったく行われません。

SELECT * FROM submissions ORDER BY str_to_date(datecreated,'%d-%m-%Y %H:%i:%s') DESC

id フィールドに従ってレコードを表示するだけです...

4

1 に答える 1

1

datecreatedすべての値が指定した形式と一致すると仮定すると、そのクエリは機能するはずです。

以下は、過去 4 年間にわたる 10 のランダムな日付を使用して、クエリが MySQL 5.6.14 で適切に機能することを示す例です。

設定:

mysql> create table submissions (
    -> id int not null auto_increment primary key,
    -> datecreated varchar(20)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> 
mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

クエリ:

mysql> SELECT * FROM submissions ORDER BY str_to_date(datecreated,'%d-%m-%Y %H:%i:%s') DESC;
+----+---------------------+
| id | datecreated         |
+----+---------------------+
|  3 | 16-11-2013 10:36:23 |
| 10 | 23-03-2013 23:04:52 |
|  4 | 02-08-2012 08:02:59 |
|  1 | 13-06-2012 21:52:34 |
|  7 | 02-10-2011 05:59:49 |
|  9 | 22-07-2011 14:04:19 |
|  2 | 04-07-2011 03:09:08 |
|  8 | 03-06-2011 03:55:04 |
|  6 | 06-01-2011 20:50:50 |
|  5 | 05-01-2011 20:54:16 |
+----+---------------------+
10 rows in set (0.00 sec)
于 2014-04-15T15:34:36.510 に答える