mysql 时间方法总结

来源:互联网 发布:linux进入grub界面 编辑:程序博客网 时间:2024/05/18 17:40

1.MAKEDATE(year, dayofyear)给定年份和天数返回日期

select MAKEDATE(2017,23)

2.WEEKOFYEAR(DATE)给定日期返回改日期所在的星期数(1-53)

select WEEKOFYEAR('2017-05-13')

3.LEFT和RIGHT返回字符串的前或者后len个字符

select LEFT('2017-05-13',4)

4.WEEKDAY(DATE)返回星期的日期索引值(0:周一,1:周二。。。。)

select WEEKDAY('2017-05-13')

5.replace into table1 (col1,col2)select.....把查询的值根据ID插入table1中,如果本来就存在则先进行删除操作,后执行插入操作

可以进行批量修改

eg:表A字段 物料编号,日期
表B字段 参考值 , 周期 ,类型(表,组,全部)
要求更新表A,三种情况
1.当物料编号的前三位等于表B中的参考值,表B的类型字段值为组时,表A的日期按照所对应的表B的周期进行更新
2.当物料编号与表B中的参考值一摸一样,表B的类型字段值为表时,表A的日期按照所对应的表B的周期进行更新
3.当物料编号在表B中的参考值找不到匹配,但是存在表B有唯一一条记录类型字段值为全部,则表A的日期按照所对应的表B字段类型为全部的记录的周期进行更新,
例如表A日期为6月12号即select datepart(week,getdate())=24,物料编号为021-00001,表B关联的表为参考值=021 周期=4 类型=组,则表示4周为一个周期,24周所在周期是21-24周,则表A的日期变成第21周的第一天即5月21日,更新表A

REPLACE INTO material(mNo, mDate)
SELECT mNo, MAKEDATE(
LEFT(mDate, 4), (WEEKOFYEAR(b.mDate) - IF((WEEKOFYEAR(b.mDate))%b.repeats, (WEEKOFYEAR(b.mDate))%b.repeats, b.repeats) +1)*7 + 1- WEEKDAY(MAKEDATE(
LEFT(mDate, 4), 1))) AS newDate
FROM 
(
SELECT material.*,ch.*
FROM material, ch
WHERE (
LEFT(material.mNo, 3) = ch.refer AND ch.types = 2) OR (material.mNo = ch.refer AND ch.types = 1) OR
 ((
SELECT COUNT(1)
FROM ch
WHERE
LEFT(mNo,3) =
LEFT(ch.refer,3))=0 AND (
SELECT COUNT(1)
FROM ch
WHERE types=3)=1 AND ch.types = 3))b