文章目录
对INT类型日期时间进行格式化
语法:FROM_UNIXTIME(unix_timestamp,format)
unix_timestamp:Unix 时间标记的一个字符串
format:格式化,可不加
SELECT *,FROM_UNIXTIME(`l_ctime`,'%Y-%m-%d %H:%i:%S') FROM `user`
过滤某列重复项
SELECT DISTINCT sex,name FROM `user` WHERE `age` = 18;
WHERE条件可以用表名.字段
SELECT * FROM `cl_store` WHERE (`cl_store`.`s_mid` = 23907)
删除表的记录后使ID从1开始
truncate table 你的表名
关联表批量插入数据
查询的数据批量插入另一张表。
insert into <表名> (字段名,…) select 字段名【select 语句】
insert into 的字段名要与 select 的字段名一一对应
insert into u_gsv_ytm (l_year, l_reginCode, l_subregionCode, l_mid, l_keyid, l_isChenlie, l_skucode, l_ytmGSV, l_pnums)
select
substring(a.QuarterCode, 2, 4) as l_year
, b.s_regionCode as l_reginCode
, b.s_subregionCode as l_subregionCode
, a.MID as l_mid
, a.KeyID as l_keyid
, b.s_isChenlie as l_isChenlie
, a.STDSKUCode as l_skucode
, a.sumgsv as l_ytmGSV
, a.QuarterCode as l_pnums
from (
SELECT MID,STDSKUCode,KeyID,QuarterCode,SUM(GSV) AS sumgsv
FROM u_gsv_old
WHERE (MonthCode >= '2023_M01' AND MonthCode < '2023_M05') OR (MonthCode >= '2022_M01' AND MonthCode < '2022_M05')
GROUP BY MID,STDSKUCode,QuarterCode
) a
left join data_store b on a.QuarterCode = b.s_pnums and a.MID = b.s_mid
substring(string, start, length)
从字符串的开始位置截取字符串。
string
表示待截取的字符串;
start
表示截取的起始位置,如果为负整数,则为从右往左数的起始位置;
length
表示需要截取的字符串长度,如果不写,则默认截取开始之后的所有字符。
连表UPDATE更新数据
UPDATE <表名> left join <表名> on <表字段> =<另一个表字段> SET <字段名>=<字段值>,…
UPDATE u_gsv_ytm d
left join (
SELECT b.s_regionCode,b.s_subregionCode,b.s_isChenlie,b.s_mid
FROM (
SELECT s_mid,SUBSTRING_INDEX(group_concat(s_pnums ORDER BY s_pnums DESC),',',1) s_pnums
FROM data_store
WHERE s_pnums<='P202302'
GROUP BY s_mid
) a
left join data_store b on a.s_mid = b.s_mid and a.s_pnums = b.s_pnums
)c
on d.l_mid = c.s_mid
SET d.l_reginCode=c.s_regionCode,d.l_subregionCode=c.s_subregionCode,d.l_isChenlie=c.s_isChenlie;
GROUP BY与GROUP_CONCAT使用
GROUP_CONCAT([DISTINCT] column1 [ORDER BY column2 ASC\DESC] [SEPARATOR seq])
将分组中column1字段对应的多个值按照column2升序或者降序进行连接。
DISTINCT
表示column1
不重复并按照column2
升序或者降序拼接;
SEPARATOR seq
表示column1
按什么分隔符拼接,默认以,
分隔。
GROUP BY
与ORDER BY
使用排序失效,可以用GROUP_CONCAT
解决。
SELECT *
FROM (
#SELECT s_mid,group_concat(s_pnums)
#SELECT s_mid,group_concat(s_pnums ORDER BY s_pnums ASC)
SELECT s_mid,SUBSTRING_INDEX(group_concat(s_pnums ORDER BY s_pnums DESC),',',1)
#SELECT s_mid,group_concat(DISTINCT s_mid ORDER BY s_pnums DESC)
FROM data_store
WHERE s_pnums<='P202302'
GROUP BY s_mid
) a
WHERE a.s_mid=2
SUBSTRING_INDEX(‘待截取的字符串’,‘以什么字符截取’,截取字符的位置) 截取函数
查看mysql数据库储存在本地哪个目录
show variables like 'datadir';
''
与""
区别
别名用""
,字段值为字符串用''
。可以混用但是这样是规范的。
使用Navicat Premium 15导出csv文件数字变成科学计数法
SELECT id,sort_id,`name`,CONCAT( '\'',sku) AS sku,price FROM xl_lottery;
SELECT id "序号ID(唯一)",sort_id "排序ID(可重复)",`name` "奖项",CONCAT( sku,'\t') AS "奖品SKU",price "金币价值" FROM xl_lottery;
SELECT id,sort_id,`name`,CONCAT( '\t',sku) AS sku,price FROM xl_lottery;
导出结果,这三种方法导出csv文件不会变成科学计数法的。导出的时候文件名可以修改成需要的文件名,文件名是什么的里面子表名称也会是文件名。
不足之处:如果把导出的csv文件导入数据表中那个字段就会带上CONCAT
拼接的字符串。