MySQL字符串给时间带来麻烦

MySQL字符串给时间带来麻烦,mysql,Mysql,我将我的时间数据存储在一个名为“timestart”的MySQL行中,我有三行包含值9:00am,10:00am,1:00pm,我正试图在MySQL查询中使用STR\u to\u DATE函数按顺序提取这些数据。以下是我使用的声明: SELECT*FROM db.test,其中name='name'和dateusing='2015-10-21'按STR_排序到日期('timeusingstart','%h:%i%p') 它成功运行,但当我需要按时间顺序对行进行排序时,将按10:00am、9:00

我将我的时间数据存储在一个名为“timestart”的MySQL行中,我有三行包含值
9:00am
10:00am
1:00pm
,我正试图在MySQL查询中使用STR\u to\u DATE函数按顺序提取这些数据。以下是我使用的声明:

SELECT*FROM db.test,其中name='name'和dateusing='2015-10-21'按STR_排序到日期('timeusingstart','%h:%i%p')


它成功运行,但当我需要按时间顺序对行进行排序时,将按
10:00am
9:00am
1:00pm
的顺序返回行。根据在中找到的信息,我使用了
%h:%I%p
。有人能告诉我我做错了什么吗?非常感谢

您没有在列上运行
STR\u TO\u DATE()
,而是在字符串上运行它。尝试使用Start从大约
时间中删除引号,它应该会起作用

顺便说一下,它们的所有功能

mysql> create table test (test varchar(255));
Query OK, 0 rows affected (0.06 sec)

mysql> insert into test values('9:00am'), ('10:00am'), ('1:00pm');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test order by str_to_date(test, '%h:%i%p');
+---------+
| test    |
+---------+
| 9:00am  |
| 10:00am |
| 1:00pm  |
+---------+
3 rows in set (0.01 sec)

你的陈述几乎是正确的。您需要删除STR_to_DATE的第一个参数周围的引号,它正在解析您提供的字符串,而不是列-timeusingstart的值

STR_TO_DATE(timeusingstart, '%h:%i%p');

非常感谢你!它工作得非常出色!我很高兴这是一个如此简单的修复。祝您有个美好的一天!