result:2017-07-27 14:35:25 2017-07-272017-07-27 14:35:251974-10-14 05:04:541974-10-14
4、同一张表两个字段值互换where a.id=b.id;
5、Sqlyog查看表字段及表定义
desc table_name;
show create table table_name;
6、字符串转数字
1)转换为整数
select CAST('123' AS SIGNED) FROM DUAL;
2)转换为指定小数位的小数
select CAST('123.343' AS DECIMAL(9,2)) FROM DUAL;
7、delete语句使用
DELETE FROM table_name [WHERE Clause]
#delete语句表使用别名会报错
DELETE FROM `zy_mobile_gelder` t WHERE t.brand = '';
#You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where t.brand = ''' at line 1
#去掉别名就没有问题了
DELETE FROM `zy_mobile_gelder` WHERE brand = '';
8、根据分隔符截取字符串
SELECT SUBSTRING_INDEX('a-b-c','-',1),SUBSTRING_INDEX('a-b-c','-',2),SUBSTRING_INDEX('a-b-c','-',-1) FROM DUAL;
result:a a-b c
9、查询一个表(t1)的某个字段记录不在另一个表(t2)中
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
10、截取字符串
截取字符串的函数:left(), right(), substring(), substring_index(),mid(), substr()。mid(), substr() 等价于 substring()。
1)字符串截取:left(str, length),从左往右截取指定长度字符串
SELECT LEFT('23432534534',2) FROM DUAL;
#23
2)字符串截取:right(str, length),从右往左截取指定长度字符串
SELECT RIGHT('23432534534',2) FROM DUAL;
#34
3)字符串截取:substring(str, pos); substring(str, pos, len),从指定位置截取指定字符串,当pos为负数时,从右向左截取指定长度字符串。
SELECT SUBSTRING('23432534534',3,3) FROM DUAL;
#432
SELECT SUBSTRING('23432534534',-3,3) FROM DUAL;
#534
11、查询字符串长度
LENGTH(STR),计算字符串的长度,一个汉字算3个字符,一个数字或字母算一个字符。
CHAR_LENGTH(str)=CHARACTER_LENGTH(str),返回字符串str的长度,长度的单位为字符,一个多字节字符算作一个单字符。
12、将查询结果列通过逗号连接起来
select group_concat(t.column_name) from test t;
13、查询当前月的第一个自然周、第二个自然周。。。
date_format(date,'%u');#周一是一周的第一天
date_format(date,'%U');#周日是一周的第一天
#取9月的第一个自然周,因为9月1日是周五,所以9月第一个自然周的周一是8月28,所以如果日期是8月28也属于9月第一周
SELECT DATE_FORMAT(STR_TO_DATE('20170827','%Y%m%d'),'%u') FROM DUAL;
SELECT DATE_FORMAT(STR_TO_DATE('20170901','%Y%m%d'),'%u') FROM DUAL;
#结果是1,表示9月第一周
SELECT DATE_FORMAT(STR_TO_DATE('20170901','%Y%m%d'),'%u')-DATE_FORMAT(STR_TO_DATE('20170901','%Y%m%d'),'%u')+1 FROM DUAL;
#结果是2,表示9月第二周
第一个时间如果不是固定的,后面可以不加2,算出来的就是根据指定日期的周
SELECT DATE_FORMAT(STR_TO_DATE('20170901','%Y%m%d'),'%u')-DATE_FORMAT(STR_TO_DATE('20170901','%Y%m%d'),'%u')+2 FROM DUAL;
14、强制结束正在执行的查询等任务
查看正在执行的任务的进程id:show full processlist
结束指定的进程:kill id
15、
#下月1号的1点
SELECT DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) FROM DUAL;
#下月
SELECT DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-9 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) FROM DUAL;
16、insert用法
1)insert into table_name(columnName1,columnName2,columnName3...) values(value1,value2,value3...);
2)插入数据来源于查询结果
INSERT INTO t1(columnName1,columnName2) SELECT field1,field2 FROM t2;
#如果每一列都插入数据,则表的列名可以省略
INSERT INTO t1 SELECT columnName1,columnName2 FROM t2;
#下面这种在查询结果时如果报错,就加一个别名
INSERT INTO t1(columnName1,columnName2) SELECT * FROM(SELECT columnName1,columnName2 FROM t2 JOIN t3) AS alias
17、update用法
单表更新
update t set t.column1=value1,t.column2=value2
where t.column3=value3;
多表关联更新
1)update t1,t2
set t1.column1=t2.value1,t1.column2=t2.value2
where t1.column3=t2.column3
and ...;
2)update t1
inner join t2
on t1.column3=t2.column3
set t1.column1=t2.value1,t1.column2=t2.value2
where t1.column3=t2.column3;
18、查询表的数据大小
1)查询所以用户占用的总大小
SELECT CONCAT(ROUND(SUM(data_length/1024/1024),2),'M')
FROM information_schema.tables t;
2)查询指定数据库占用存储空间
SELECT CONCAT(ROUND(SUM(data_length/1024/1024),2),'M')
FROM information_schema.tables t
WHERE 1=1
AND t.TABLE_SCHEMA='数据库名';
3)查询指定数据库的指定表占用存储空间
SELECT CONCAT(ROUND(SUM(data_length/1024/1024),2),'M')
FROM information_schema.tables t
WHERE 1=1
AND t.TABLE_SCHEMA='数据库名'
AND t.TABLE_NAME='表名';