2012-07-24 74 views
2

我已将日期保存为字符串,例如:Fri Apr 04 15:58:43 BST 2014 年份总是在最后,我想查询以获取年份少于特定年份的记录,说2012年。这可能吗?怎么样?是否有可能解决这个问题从MySQL?即将字符串中的日期转换为日期?如何从字符串中提取日期

回答

1

这里是基线查询

SELECT REVERSE(LEFT(REVERSE('Fri Apr 04 15:58:43 BST 2014'),4)); 

这是执行

​​

OMG我在想什么???我其实是对其进行解码

SET @datestring = 'Fri Apr 04 15:58:43 BST 2014'; 
SELECT CONCAT(YYYY,'-',MM,'-',DD,' ',HHMMSS) dt FROM 
(SELECT REVERSE(LEFT(REVERSE(@datestring),4)) as YYYY, 
SUBSTR(FLOOR((LOCATE(LEFT(SUBSTR(@datestring,5),3),'JanFebMarAprMayJunJulAugSepOctNovDec')+2)/3)+100,2) MM, 
SUBSTR(@datestring,9,2) DD, 
SUBSTR(@datestring,12,8) HHMMSS) A; 

和我的解码工作

mysql> SET @datestring = 'Fri Apr 04 15:58:43 BST 2014'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT CONCAT(YYYY,'-',MM,'-',DD,' ',HHMMSS) dt FROM 
    -> (SELECT REVERSE(LEFT(REVERSE(@datestring),4)) as YYYY, 
    -> SUBSTR(FLOOR((LOCATE(LEFT(SUBSTR(@datestring,5),3),'JanFebMarAprMayJunJulAugSepOctNovDec')+2)/3)+100,2) MM, 
    -> SUBSTR(@datestring,9,2) DD, 
    -> SUBSTR(@datestring,12,8) HHMMSS) A 
    -> ; 
+---------------------+ 
| dt     | 
+---------------------+ 
| 2014-04-04 15:58:43 | 
+---------------------+ 
1 row in set (0.00 sec) 

mysql> 
+0

谁高举我,谢谢!!! @IkeWalker有更好的答案:http://stackoverflow.com/a/11639700/491757 – RolandoMySQLDBA 2012-07-24 21:49:36

4

您可以使用MySQL STR_TO_DATE()功能,这些值到MySQL日期转换:

mysql> select str_to_date('Fri Apr 04 15:58:43 BST 2014','%a %b %d %H:%i:%S BST %Y'); 
+------------------------------------------------------------------------+ 
| str_to_date('Fri Apr 04 15:58:43 BST 2014','%a %b %d %H:%i:%S BST %Y') | 
+------------------------------------------------------------------------+ 
| 2014-04-04 15:58:43             | 
+------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

下面是使用一个粗略的例子您的样本串说明的查询与2012年前将需要进行全表扫描日期返回所有行,所以它不会那么快,但它说明了基本conce pt你需要做什么:

select * 
from your_table 
where str_to_date(your_column,'%a %b %d %H:%i:%S BST %Y') < '2012-01-01' 
+0

这里是一个大胖子+1为了简单,因为我只是当我写我的回答没有思考过。 – RolandoMySQLDBA 2012-07-24 21:48:30

+0

我可以更改列内的值吗?我需要永久解决这个问题。 – 2012-07-27 14:49:03

+0

您应该添加一个新的可空DATE列,利用现有的字符串值设置新列的值,那么一旦你不使用它的任何更多的选择性删除字符串列。 – 2012-08-06 14:23:21