我有一个带有varchar列DateFrom的表,其格式如下:
2014-02-22T08:08:00
我想要一个打印08:08的sql和一个打印22-02-2014的sql,但我似乎无法让时间函数工作。
我想做的是获取DateFrom中的所有条目,并将它们作为实时打印(HH:MM)日期相同。
尽管我认为字符串函数在这种情况下是一个更好的选择(比如@hakre-answered),而且cpu成本更低,但您也可以使用STR_TO_DATE
、DATE
和TIME
函数来实现这一目标。
SELECT
DATE(STR_TO_DATE('2014-02-22T08:08:00', '%Y-%m-%dT%H:%i:%s')),
TIME(STR_TO_DATE('2014-02-22T08:08:00', '%Y-%m-%dT%H:%i:%s'))
如果您不是在寻找日期/时间,而是在寻找字符串函数,它们在这里可用:
- http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
我认为对子字符串操作有用的一个字符串函数是SUBSTRING
。你可以告诉每个varchar列,你想要一个从某个位置开始的子字符串,它有一定的长度:
SUBSTRING(DateFrom FROM 1 FOR 8) AS DateName -- "2014-02-22"
SUBSTRING(DateFrom FROM 10 FOR 5) AS TimeName -- "08:08"
使用其他字符串函数按您需要的顺序连接部件。
或者,您可以将该格式的varchar字符串强制转换为日期时间类型,然后根据需要设置格式:
CAST(DateFrom AS datetime)
有关铸造类型和可用的日期-时间函数的更多信息,请参阅Mysql手册:
- http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
SQL示例:
SET @DateFrom = '2014-02-22T08:08:00';
SELECT DATE(CAST(@DateFrom AS datetime)); -- '2014-02-22'
SELECT TIME(CAST(@DateFrom AS datetime)); -- '08:08:00'