Mysql的骚操作说明

Mysql的常规操作

MySQL5.7中文参考手册 MySQL8.0中文参考手册

Mysql中文网

https://www.mysqltutorial.org/ - 搜索mysql的用法

记录些不常用,但是很实用的操作,旨在在MySQL语言能解决的批量操作的问题,不动用其他动态或静态语言的辅助。

1、FROM_UNIXTIME 时间戳转时间格式

select scode,sid,gender,type,FROM_UNIXTIME(report_time) as report_time,FROM_UNIXTIME(add_time) as add_time,FROM_UNIXTIME(start_time) as start_time,FROM_UNIXTIME(review_time)as review_time  from hd_samples;

2、UNIX_TIMESTAMP 时间格式转时间戳

select sid,gene_name,rs,start,end, chr,UNIX_TIMESTAMP(times) as times from hd_user_locinfo;

3、group_concat,concat 分组拼接数据列,拼接数据列

通过例子熟悉使用方式

# 采用去重字段,并分组拼接
SELECT GROUP_CONCAT(DISTINCT User ORDER BY User SEPARATOR '\n')FROM mysql.user by name;

SEPARATOR ";" 用于执行分割符号,如操作是指定为分号

# 简单分组拼接,加引号
select scode,  GROUP_CONCAT(concat('\'',scode,'\'')) from hd_samples where id in ('61515','61505')

结果如下:

scode GROUP_CONCAT(concat(''',scode,'''))
KC47627683 'KC47627683','KC46732816'

理论解释:

GROUP_CONCAT:该函数将分组中的非NULL值串联起来称为一个字符串。如果分组中的某个值为NULL,而串联的结果为NULL

CONCAT(str1,str2):返回由连接参数产生的字符串。可能有一个或多个参数。

MariaDB 参考文献

mysqltutorial

4、获取3个月或一年前的时间及时间戳

# 三个月前的时间,格式:xxxx-xx-xx,时间戳是10位
select SUBDATE(CURDATE(),INTERVAL 3 month),UNIX_TIMESTAMP(SUBDATE(CURDATE(),INTERVAL 3 month));
# 指定日期三个月后的日期
select DATE_ADD('2021-01-09', INTERVAL 3 month) 
# 当前三个月后的日期
select DATE_ADD(CURDATE(), INTERVAL 3 month) 
# 获取三天前时间
SELECT now() - interval 72 hour;

时间格式(SUBDATE(CURDATE(),INTERVAL 3 month)) 时间戳(UNIX_TIMESTAMP(时间格式))
2020-10-27 1603728000
# 一年前的时间,格式:xxxx-xx-xx xx:xx:xx,格式:xxxx-xx-xx,时间戳是10位
select SUBDATE(NOW(),INTERVAL 1 YEAR),UNIX_TIMESTAMP(SUBDATE(NOW(),INTERVAL 1 YEAR));
时间格式(SUBDATE(NOW(),INTERVAL 1 YEAR)) 时间戳(UNIX_TIMESTAMP(时间格式))
2020-01-27 17: 18: 08 1580116688

5、转换13位时间戳为10位时间戳

select substr(1567267200000, 1, 10);

6、日期格式化

select DATE_FORMAT('2021-07-26 14:52:00','%Y-%m-%d');

7、已创建的表中添加自增主键

alter table ADD add id int(11) not null primary key AUTO_INCREMENT COMMENT '主键ID' FIRST;

参考地址

胡梦旭博客
请先登录后发表评论
  • latest comments
  • 总共0条评论