用于记录一些工作中使用到的函数等。持续更新
一、需要批量的在数据库修改数据,将指定字段的指定字符删除。 replace函数
update 表名
set 字段名 = replace(CC,旧字符,新字符) where 条件
二、在指定字段中新增指定字符 concat函数
update 表名 set 字段名= concat(字段名,新增字符串) where 条件;
-- 默认加到指定字段名的最后
三、指定字符分组,然后在组内进行排序,将前五行数据取出。DENSE_RANK 函数
WITH SAPRank(Lot_Num,Part_Num,Op_Num, rank_rn)
AS (
SELECT Lot_Num,Part_Num,Op_Num ,
DENSE_RANK() OVER(PARTITION BY Lot_Num,Part_Num order by Op_Num DESC) as rank_rn
FROM 表名 where ConfChangeTime>= '2021-10-08'
)
SELECT Lot_Num,Part_Num,Op_Num FROM SAPRank WHERE rank_rn <= 5;
-- DENSE_RANK() OVER(PARTITION BY Lot_Num,Part_Num order by Op_Num DESC) as rank_rn 根据Lot_Num,Part_Num 进行分组,然后在组内根据Op_Num进行排序,返回名次
WITH SAPRank(Lot_Num,Part_Num,Op_Num, rank_rn)
AS (
SELECT Lot_Num,Part_Num,Op_Num ,
DENSE_RANK() OVER(order by Op_Num DESC) as rank_rn
FROM 表名 where ConfChangeTime>= '2021-10-08' group by Lot_Num,Part_Num,Op_Num
)
SELECT Lot_Num,Part_Num,Op_Num FROM SAPRank WHERE rank_rn <= 5;
-- 个人测试这样写效率更高 group by Lot_Num,Part_Num,Op_Num 只是用来去重
四、 根据指定字段进行数据分组,分组后将 指定字段合并显示。
实际效果:
select
LN=STUFF((SELECT ';' + LN FROM 表名 t WHERE Related = t1.Related FOR XML PATH('')), 1, 1, ''),
PN=STUFF((SELECT ';' + PN FROM 表名 t WHERE Related = t1.Related FOR XML PATH('')), 1, 1, ''),
Op=STUFF((SELECT ';' + Op FROM 表名 t WHERE Related = t1.Related FOR XML PATH('')), 1, 1, ''),
Related, MAX(ID) as ID
from 表名 as t1
where 1 = 1
and [Date] >= '2021-10-12 00:00:00'
and department like N'%Plating%'
and [Date] <= '2021-12-22 23:59:59'
group by Related
五、生成时间戳
DATEDIFF() 函数
DATEDIFF(时间间隔类型,开始时间,结束时间) 是用来返回时间间隔的
通常将开始时间指定为 格林威治 时间,将时间间隔类型设置为 秒 还是毫秒 看自己需求。通过这个方式可以确定为时间戳
时间间隔类型:
select DATEDIFF(S,'1970-01-01 08:00:00','2018-07-06 14:43:09')
-- 将数据库里的时间数据转为时间戳
update set 时间戳字段 = DATEDIFF(s,'1970-01-01 08:00:00',实践类型字段)
六、替换指定内容
update iexec.local_quality_common.pcp_master set Mail_Group = replace(Mail_Group,'被替换内容','新内容')
where PC_ID = 4966