时间戳,处理时间戳concat,substr,from_unixtime,unix_timestamp,to_date,add_months,trunc,current_timestamp,unix

截取a.rrr字段的前4位,和从第6位开始的2位,拼接,取名位uuu

concat(substr(a.rrr,1,4),substr(a.form_no,6,2)) as uuu
注释:拼接(截取(a表.rrr字段,从第1为开始取,数4个),截取(a表.form_no字段,从第6为开始取,取2位))

指截取系统时间的年和系统时间的月,作为时间字段

(一)

concat(substr(from_unixtime(unix_timestamp()),1,4),substr(from_unixtime(unix_timestamp()),6,2)) as fperiod
拼接(截取(时间戳从第一个开始取,取4位),截取(时间戳从第6位开始取,取2位))

(二)

concat(
substr(to_date(add_months(FROM_UNIXTIME(UNIX_TIMESTAMP(),‘yyyy-MM-dd’),-2)),1,4),
substr(to_date(add_months(FROM_UNIXTIME(UNIX_TIMESTAMP(),‘yyyy-MM-dd’),-2)),6,2)
) as max_time
to_date将字符串转为时间格式

(三)

concat(substr(to_date(add_months(trunc(current_timestamp(),‘MM’),-1)),1,4)
,substr(to_date(add_months(trunc(current_timestamp(),‘MM’),-1)),6,2))
注:current_timestamp() 当前时间戳
unix_timestamp() 系统时间戳

(四)

concat(substr(to_date(add_months(trunc(current_timestamp(),‘MM’),-1)),1,4)
,substr(to_date(add_months(trunc(current_timestamp(),‘MM’),-1)),6,2))

add_months 函数主要是对日期函数进行操作,在数据查询的过程中进行日期的按月增加,其形式为:

add_months(date,int);其中第一个参数为日期,第二个为按月增加的幅度,例如:
add_months (sysdate,2):就是当前日期的两个月之后的时间。
如:表示2个月以后的时间:
SQL> select add_months(sysdate,2) from dual;
ADD_MONTHS(SYSDATE,+2)

2012-5-16 下午 02:30:47

表示2个月以前的时间,可以用下列语句

SQL> select add_months(sysdate,-2) from dual;

ADD_MONTHS(SYSDATE,-2)

2011-11-16 下午 02:32:39

如果第一个参数即当前日期的地方是某一个指定的具体日期,则该日期需要使用to_date(‘20190101’,‘yyyymmdd’)进行转换,如下:

select * from tb_user where create_date_time>to_date(‘20190101’,‘yyyymmdd’)and create_date_time

以上语句表示查询日期在20190101到20190301之间的数据
————————————————
版权声明:本文为CSDN博主「在等风来的日子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HANHUABAO1122/article/details/99974823

FROM_UNIXTIME(unix_timestamp,format)

在MySQL中如何格式化时间戳?
在mysql中因为timestamp无法支持到毫秒,所以很多时候采用毫秒进行存储。那么如何将存储在数据库中Int类型的时间,如: 1344954515 ,转换成我们正常可以肉眼能看懂的时间格式呢?

我们一般都使用FROM_UNIXTIME函数。
FROM_UNIXTIME(unix_timestamp,format)
unix_timestamp为需要处理的时间戳(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串。
format为需要转换的格式
mysql官方手册的解释为:返回’YYYY-MM- DD HH:MM:SS’或YYYYMMDDHHMMSS 格式值的unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。若format 已经给出,则结果的格式是根据format 字符串而定。
format的格式和日常的编程语言的时间格式是保持一致的。
例如:
mysql> select FROM_UNIXTIME(1344954515,’%Y-%m-%d %H:%i:%S’);
±----------------------------------------------+
| FROM_UNIXTIME(1344954515,’%Y-%m-%d %H:%i:%S’) |
±----------------------------------------------+
| 2012-08-14 22:28:35 |
±----------------------------------------------+
1 row in set (0.00 sec)

UNIX_TIMESTAMP()是与之相对的时间函数
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
官方手册解释为:若无参数调用,则返回一个 Unix timestamp (‘1970-01-01 00:00:00’ GMT 之后的秒数) 作为无符号整数。若用date 来调用 UNIX_TIMESTAMP(),它会将参数值以’1970-01-01 00:00:00’ GMT后的秒数的形式返回。
date 可以是一个 DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

例如:

1
2
3
4
5
6
7
mysql> select UNIX_TIMESTAMP(‘2012-09-04 18:17:23’);
±--------------------------------------+
| UNIX_TIMESTAMP(‘2012-09-04 18:17:23’) |
±--------------------------------------+
| 1346753843 |
±--------------------------------------+
1 row in set (0.00 sec)

实际应用中,我们可以将格式转换为毫秒的与数据库中进行比较,也可以将数据库的Int格式转换为普通格式进行比较。
例如:查询所有创建日期大于2012-09-03 18:00:00之后的博客数据
方法一:将日期转换为int比较

1
select * from blog where createdTime > UNIX_TIMESTAMP(‘2012-09-03 18:00:00’ );

方法二:将int转换为时间格式比较

1
select * from blog where FROM_UNIXTIME(createdTime, ‘%Y-%m-%d %H:%i:%S’) > ‘2012-09-03 18:00:00’;

下列修饰符可以被用在format字符串中,可以组合一些常见日期格式:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天

%% 一个文字“%”。

TRUNC(date[,fmt])

其中:date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
如果当日日期是:2011-3-18
1.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-18
2.select trunc(sysdate, ‘mm’) from dual --2011-3-1 返回当月第一天.
3.select trunc(sysdate,‘yy’) from dual --2011-1-1 返回当年第一天
4.select trunc(sysdate,‘dd’) from dual --2011-3-18 返回当前年月日
5.select trunc(sysdate,‘yyyy’) from dual --2011-1-1 返回当年第一天
6.select trunc(sysdate,‘d’) from dual --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, ‘hh’) from dual --2011-3-18 14:00:00 当前时间为14:41
8.select trunc(sysdate, ‘mi’) from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确

你可能感兴趣的:(程序媛)