2015-10-16 80 views
1

我有我的时间数据存储在称为“timestart”的MySQL行中,我有三行包含值9:00am10:00am1:00pm,我试图用STR_TO_DATE函数在我的MySQL查询中。下面是我使用的语句:MySQL String to Time Trouble

SELECT * FROM db.test WHERE name='Name' and dateusing='2015-10-21' ORDER BY STR_TO_DATE('timeusingstart', '%h:%i%p');

它成功运行,但是当我需要他们的时间顺序进行排序的行获得的10:00am9:00am1:00pm的顺序返回。根据我在this documentation找到的信息,我使用了%h:%i%p。任何人都可以告诉我我在这里做错了什么?非常感谢!

回答

2

您未在列上运行STR_TO_DATE(),您正在使用字符串运行它。尝试从timeusingstart左右删除引号,它应该可以工作。

顺便说一下,MySQL provides excellent documentation所有的功能!

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) 
+1

非常感谢!它工作出色!我很高兴这是一个简单的修复。祝你今天愉快! – user1967777

1

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

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