1.时间间隔函数 ADDDATE(date,INTERVAL expr unit)
interval 代表时间间隔 :
SELECT NOW(); | 2018-06-20 15:00:00 当前时间 |
---|---|
SELECT ADDDATE(‘2018-06-20 15:00:00‘,INTERVAL -60 SECOND) AS time | 2018-06-20 14:59:00 – 减60秒 |
SELECT ADDDATE(‘2018-06-20 15:00:00‘,INTERVAL -1 MINUTE) AS time; | 2018-06-20 14:59:00 – 减1分钟 |
SELECT ADDDATE(‘2018-06-20 15:00:00‘,INTERVAL -1 HOUR) AS time; | 2018-06-20 14:00:00 – 减1小时 |
SELECT ADDDATE(‘2018-06-20 15:00:00‘,INTERVAL -1 DAY) AS time; | 2018-06-19 15:00:00 – 减1天 |
SELECT ADDDATE(‘2018-06-20 15:00:00‘,INTERVAL -1 MONTH) AS time; | 2018-05-20 15:00:00 – 减1个月 |
SELECT ADDDATE(‘2018-06-20 15:00:00‘,INTERVAL -1 YEAR) AS time; | 2017-06-20 15:00:00 – 减1年 |
举例:计算入库表在30天前的计划库存量和实际库存量
select
sum(extant_quantity),
sum(pre_quantity)
from
t_cargo_instorage
where
create_time
between
ADDDATE(SYSDATE(),INTERVAL -10 DAY) and SYSDATE();
2.MySQL获得当前日期+时间(date + time)函数sysdate() :
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值
举例:
在项目中的应用有
<insert id="insert" parameterType="com.apollo.model.Transfer">
insert into t_transfer (id, cargo_id, operator_id,
instorage_cargo_id, company_id, from_id,
to_id, quantity, from_warehouse_id,
to_warehouse_id, create_time)
values (#{id,jdbcType=INTEGER}, #{cargoId,jdbcType=INTEGER}, #{operatorId,jdbcType=INTEGER},
#{instorageCargoId,jdbcType=INTEGER}, #{companyId,jdbcType=INTEGER}, #{fromId,jdbcType=INTEGER},
#{toId,jdbcType=INTEGER}, #{quantity,jdbcType=INTEGER}, #{fromWarehouseId,jdbcType=INTEGER},
#{toWarehouseId,jdbcType=INTEGER},sysdate())
</insert>
3.mysql日期和字符相互转换方法
按照指定日期或时间显示格式 输出日期或日期时间
date_format(date,’%Y-%m-%d’) ————–>oracle中的to_char();
按照指定日期或时间显示格式 将字符串转换为日期或日期时间类型
str_to_date(date,’%Y-%m-%d’) ————–>oracle中的to_date();
符号 | 含义 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 代表月, 格式为(1……12) |
%D | 带有英文前缀的月中的天 |
%d | 代表月份中的天数,格式为(00……31) |
%e | 代表月份中的天数, 格式为(0……31) |
%f | 微秒 |
%H | 代表小时,格式为(00……23) |
%h | 代表 小时,格式为(01……12) |
%I | 代表小时,格式为(01……12) |
%i | 代表分钟, 格式为(00……59) 【只有这一个代表分钟,大写的I 不代表分钟代表小时】 |
%j | 年的天(001~366) |
%k | 小时(0~23) |
%l | 小时(1~12) |
%M | 月名 |
%m | 月,数值(00~12) |
%p | AM或PM |
%r | 时间,12-小时(hh:mm:ss AM或PM) |
%S | 秒(00~59) |
%s | 秒(00~59) |
%T | 时间,24-小时(hh:mm:ss) |
%U | 周(00~53)星期日是一周的第一天 |
%u | 周(00~53)星期一是一周的第一天 |
%V | 周(01~53)星期日是一周的第一天,与%X使用 |
%v | 周(01~53)星期一是一周的第一天,与%x使用 |
%W | 星期名 |
%w | 周的天(0=星期天,6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
举例:
select str_to_date(‘09/01/2009’,’%m/%d/%Y’)
select str_to_date(‘20140422154706’,’%Y%m%d%H%i%s’)
select str_to_date(‘2014-04-22 15:47:06’,’%Y-%m-%d %H:%i:%s’)
date_format(create_time,'%Y-%m-%d %H:%i:%s') as createTime
当前时间按月-日 时:分:秒显示:
SELECT DATE_FORMAT(NOW(),'%m-%d %h:%i %p')
FROM dual;
-->'02-09 06:00 PM'
当前时间按 年-月-日 时:分:秒 AM/PM显示:
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %h:%i:%s %p') FROM dual;
-->'2017-02-09 06:00:35'
当前时间按 年 周 日 时:分:秒显示:
SELECT DATE_FORMAT(NOW(),'%Y %b %d %T') FROM dual;
-->'2017 Feb 09 18:04:13'
4.DATEDIFF()函数的用法
DATEDIFF() 函数返回两个日期之间的时间
语法:DATEDIFF(datepart,startdate,enddate)
在项目中的应用
<select id="operatorStockInfo" resultType="java.util.HashMap">
select id,cargo_id AS cargoId,extant_quantity AS num ,company_id AS companyId,tenant_id as tenantId,warehouse_id AS warehouseId,location_id AS locationId,produce_date AS produceDate,DATEDIFF(SYSDATE(),create_time) AS inTime from t_cargo_instorage where extant_quantity >0
<if test="cargoId !=null">
and cargo_id =#{cargoId}
</if>
<if test="tenantId !=null">
and tenant_id =#{tenantId}
</if>
<if test="companyId !=null">
and company_id =#{companyId}
</if>
<if test="warehouseId !=null">
and warehouse_id =#{warehouseId}
</if>
<if test="locationId !=null">
and location_id =#{locationId}
</if>
group by id,cargo_id,company_id,warehouse_id,location_id,produce_date,create_time order by produce_date, create_time
</select>