日期和时间处理函数
函数 | 说明 |
---|---|
AddDate() | 增加一个日期(天、周等) |
AddTime() | 增加一个时间(时、分等) |
CurDate() | 返回当前日期 |
CurTime() | 返回当前时间 |
Date() | 返回日期时间的日期部分 |
DateDiff() | 计算两个日期之差 |
Date_Add() | 高度灵活的日期运算函数 |
Date_Format() | 返回一个格式化的日期或时间串 |
Day() | 返回一个日期的天数部分 |
DayOfWeek() | 对于一个日期,返回对应的星期几 |
Hour() | 返回一个时间的小时部分 |
Minute() | 返回一个时间的分钟部分 |
Month() | 返回一个日期的月份部分 |
Now() | 返回当前日期和时间 |
Second() | 返回一个时间的秒部分 |
Time() | 返回一个日期时间的时间部分 |
Year() | 返回一个日期的年份部分 |
SELECT cust_id, order_num
FROM orders
WHERE order_date = '2005-09-01';
此SELECT语句正常运行。它检索出一个订单记录,该订单记录的order_date为2005-09-01。
但是,使用WHERE order_date = '2005-09-01'
可靠吗? order_ date 的数据类型为 datetime。这种类型存储日期及时间值。样例表中的值全都具有时间值 00:00:00,但实际中很可能并不总是这样。如果用当前日期和时间存储订单日期(因此你不仅知道订单日期,还知道 下订单当天的时间),怎么办?比如,存储的order_date
值为 2005-09-01 11:30:05,则WHERE order_date = '2005-09-01'失败。即使给出具有该日期的一行,也不会把它检索出来,因为WHERE匹配失败。
解决办法是指示 MySQL 仅将给出的日期与列中的日期部分进行比 较,而不是将给出的日期与整个列值进行比较。为此,必须使用 Date() 函数。Date(order_date) 指示 MySQL 仅提取列的日期部分,更可靠的 SELECT 语句为:
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date) = '2005-09-01';
如果要的是日期,请使用Date() 如果你想要的仅是日期, 则使用Date()是一个良好的习惯,即使你知道相应的列只包 含日期也是如此。这样,如果由于某种原因表中以后有日期和 时间值,你的SQL代码也不用改变。当然,也存在一个Time() 函数,在你只想要时间时应该使用它。
Date()和Time()都是在MySQL 4.1.1中第一次引入的。
网友评论