mysql日期和字符相互转换方法
date_format(date,'%Y-%m-%d') -------------->oracle中的to_char();
str_to_date(date,'%Y-%m-%d') -------------->oracle中的to_date();
%Y:代表4位的年份 %y:代表2为的年份
%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)
%H:代表小时,格式为(00……23)
%k:代表小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)
%i: 代表分钟, 格式为(00……59)
%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
MySQL varchar转换为int
- 手动转化类型(直接+0) select server_id from cardserver where game_id = 1 order by server_id+0 desclimit 10
- 使用MySQL函数CAST: select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;
- 使用MySQL函数CONVERT: select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED)desc limit 10;
时间差计算
time_to_sec(timediff(t2, t1))
timestampdiff(second, t1, t2)
unix_timestamp(t2) -unix_timestamp(t1)
mysql 时间戳用法
ALTER TABLE tablename ADD lastupdatetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ALTER TABLE tablename ADD lastupdatetime TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如:
-
在创建新记录和修改现有记录的时候都对这个数据列刷新: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-
在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-
在创建新记录的时候把这个字段设置为0,以后修改时刷新它: TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-
在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它: TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP
sql批量导入
必须在本地执行,再复制到远程 400w 数据 update 10min 23s
load data [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name, )]
LOAD DATA INFILE 'd:234/123.txt' INTO TABLE `tels` LINES TERMINATED BY '
';
//去重
INSERT INTO hfvast_smg_1 (id) SELECT DISTINCT tels FROM tels
INSERT INTO hfvast_smg_1 (id) SELECT tels FROM tels
INSERT INTO hfvast_smg_1 (id,serverNum,tagNum,content,createdDate,msgFormat,TYPE)
SELECT id,serverNum,tagNum,content,createdDate,msgFormat,TYPE FROM hfvast_smg_2
SELECT * FROM hfvast_smg_1 WHERE tagNum='8615234567890'
SELECT id,serverNum,tagNum,content,createdDate,msgFormat FROM hfvast_smg_1 WHERE TYPE = 4 LIMIT 0,200
UPDATE hfvast_smg_1 SET TYPE=0 WHERE TYPE=0 LIMIT 1000
emoji数据库存储
emoji 表情 mysql数据库需要将utf8改为 utf8mb4.
truncate 与drop
truncate 保留表结构 drop 反之
索引
ALTER TABLE message_received ADD INDEX(TIME)
ALTER TABLE `student` MODIFY COLUMN `id` COMMENT '学号';
DROP INDEX savetime ON t_wt_kdxf_main_sheet 删除列索引
ALTER TABLE t_wt_kdxf_main_sheet DROP COLUMN savetime 删除列
###
去重导入
INSERT IGNORE INTO t_wt_realname_linshi (tel)SELECT tel FROM tel;
查询重复记录
SELECT sheetid FROM t_wt_financial_orde GROUP BY sheetid HAVING COUNT(*) >1
DELETE FROM t_wt_financial_orde WHERE id IN (
SELECT * FROM t_wt_financial_orde WHERE sheetid IN (SELECT sheetid FROM t_wt_financial_orde GROUP BY sheetid HAVING COUNT(sheetid) > 1)
AND id NOT IN (SELECT MIN(id) FROM t_wt_financial_orde GROUP BY sheetid HAVING COUNT(sheetid )>1) )
直接使用上面进行删除会报错,提示You can't specify target table 'wms_cabinet_form' for update in FROM clause
意思:不能先select出同一表中的某些值,再update这个表(在同一语句中)。
CREATE TABLE t_wt_financial_orde_2 AS (SELECT * FROM t_wt_financial_orde WHERE sheetid IN (SELECT sheetid FROM t_wt_financial_orde GROUP BY sheetid HAVING COUNT(sheetid) > 1)
AND id NOT IN (SELECT MIN(id) FROM t_wt_financial_orde GROUP BY sheetid HAVING COUNT(sheetid )>1))
创建临时表 将待删除的记录存到临时表 表关联删除重复的记录即可
DELETE FROM t_wt_financial_orde WHERE id IN (SELECT id FROM t_wt_financial_orde_2)