SQL
1. 修改字段的位置
比如:原表结构为a,b,c,要新增一个字段d,插入到b之后c之前,即a,b,d,c
2. 添加字段
alter table 表名 add 字段名 字段类型 not null default 0
3. 删除字段
alter table 表名 drop column 字段名
4. 修改字段长度
ALTER COLUMN 字段名 类型名(类型长度)
5. 修改字段名字
exec sp_rename '表名.字段名','新字段名','column'
6. 修改字段类型
alter table 表名 alter column 字段名 新的类型 not null
7. 异常:An explicit value for the identity column in table 'Picked_Wafer_Qty' can only be specified when a column list is used and IDENTITY_INSERT is ON.
原因:数据表包含自增列
处理:到数据的时候把自增列排除掉

1 insert into Picked_Wafer_Qty(LotNo,WaferLotNo,WaferId,MachineCode,BinType,PickedQty,UpdateTime,CassNo,OperaterNo) select LotNo,WaferLotNo,WaferId,MachineCode,BinType,PickedQty,UpdateTime,CassNo,OperaterNo from SZSMSdb.Mapping.dbo.Picked_Wafer_Qty where WaferLotNo='AP2135782.11'
8. 将字符串类型转换为数值类型
1.使用cast()方法
select cast('6.0' as decimal(6, 2)); -- 6.00
2.使用convert()方法
select convert(decimal(6, 2), '100'); -- 100.00
3.使用与数值0相加的方法
select '233' + 0; -- 233
9. ROW_NUMBER() OVER()函数
用途:用以分组排序
格式:row_number() over(partition by 分组列 order by 排序列 desc)
说明:在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行
举例:对查询结果按BatchNo分组,同一组内按BatchStageSeq排序
select BatchNo 批,BatchStage 站,BatchDate 时间,ROW_NUMBER() OVER(PARTITION BY BatchNo ORDER BY BatchStageSeq) RANK from tbBatch where BatchNo in(select ProductBatch from tbProduct where ProductCustomer like '%GTA' and ProductType like '%DDR')
查询后分组排序结果:
获取每个组/分区的最大行号
首先,我们可以使用ROW_NUMBER函数和PARTITION BY子句来为每个部门的行分配行号。我们可以将结果存储在一个临时表
SELECT employee_id, employee_name, department_id, hire_date, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY hire_date) AS row_num INTO temp_table FROM employees
我们使用了PARTITION BY department_id来分组数据,并按照hire_date进行排序。结果将存储在一个名为temp_table的临时表中,并为每个部门的行分配了一个行号。
接下来,我们可以使用子查询来获取每个部门的最大行号。我们可以在上一步创建的临时表上使用MAX函数来实现这一点
SELECT department_id, MAX(row_num) AS max_row_num FROM temp_table GROUP BY department_id
10. charindex函数, 查 某个字符 或 某个字符串 在 另一个字符串中的位置
charindex()语法
CHARINDEX ( expression1 , expression2 [ , start_location ] )
解析:
expression1 必需 ---要查找的子字符串
expression2 必需 ---父字符串
start_location 可选---指定从父字符串开始查找的位置,默认位置从1开始
二: charindex()的作用
从expression2字符串中指定的位置处开始查找是否包含expression1字符串
三:charindex()的返回值
如果能够从expression2字符串中查找到expression1字符串则返回expression1在expression2出现的位置;反之,返回0
四:实例演示
1. 包含:
select CHARINDEX('cd','abcdefg')
2. 不包含:
select CHARINDEX('dc','abcdefg')
五:charindex()的参数不区分大小写
select CHARINDEX('bCD','abcdefg')
11. 删除表、删除/清空数据
删除表:
drop table tb1;
drop table xdb.tb1;
清空表:
delete from 表名; --数据可恢复
truncate table 表名; --数据不可恢复
通过指定条件删除:
delete from tb1 where name='测试';
指定唯一键的范围删除:
delete from tb1 where id between 1 and 5;
倒序排序后删除表中前5条记录:
delete from tb1 order by id desc limit 5;
正序排序后删除表中前5条记录:
delete from tb1 order by id asc limit 5;
11. 时间日期函数
判断是否当天,createdate为日期字段
datediff(day,createdate,GetDate())=0
第几天、第几月
-- 1.一个月第一天的 Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) -- 2.本周的星期一 Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) -- 3.一年的第一天 Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) -- 4.季度的第一天 Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) -- 5.当天的半夜 Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) -- 6.上个月的最后一天 Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) -- 7.去年的最后一天 Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) -- 8.本月的最后一天 Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) -- 9.本年的最后一天 Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) -- 10.本月的第一个星期一 select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0) select 本年第多少周=datename(week,getdate()) ,今天是周几=datename(weekday,getdate()) -- dateadd 在向指定日期加上一段时间的基础上,返回新的datetime值 -- 向日期加上2天 或 增加1个月 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000 select dateadd(month,2,'2004-10-15') --返回:2004-12-17 00:00:00.000 --3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回天数:17 select DateDiff(s,'2005-07-20','2005-7-25 22:56:32') --返回值为 514592 秒 select DateDiff(ms,'2005-07-20','2005-7-25 22:56:32') --返回值为 微秒 select DateDiff(d,'2005-07-20','2005-7-25 22:56:32') -- 返回值为 5 天 select DatePart(w,'2005-7-25 22:56:32')--返回值为 2 即星期一(周日为1,周六为7) select DatePart('d','2005-7-25 22:56:32')--返回值为 25即25号 select DatePart('y','2005-7-25 22:56:32')--返回值为 206即这一年中第206天 select DatePart('yyyy','2005-7-25 22:56:32')--返回值为 2005即2005年 --DateDiff (interval,date1,date2) 以interval 指定的方式, --返回date2 与date1两个日期之间的差值 date2-date1 --DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 --DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 --DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称
当前时间函数
-- 返回当前日期和时间 select GETDATE() -- 返回代表指定日期的指定日期部分的整数。 select datepart(month, '2004-10-15') --返回 月 select datepart(day, '2004-10-15') --返回 日 select datepart(year, getdate()) --返回 年 select convert(varchar(8),getdate(),114) -- 当前时间 select datename(weekday, getdate()) --返回:星期五 select datepart(weekday, getdate()) --返回:小写星期2-1 select convert(varchar(10),getdate(),120) -- 当前日期 select datepart(S, '2004-10-15') --返回 月 -- 返回时间到豪秒 Select CONVERT(VARCHAR(30),GETDATE(),9) -- 获取当前日期,年、月、日、周、时、分、秒 select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) as '月', DateName(day,GetDate()) as '日', DateName(dw,GetDate()) as '星期', DateName(week,GetDate()) as '周数', DateName(hour,GetDate()) as '时', DateName(minute,GetDate()) as '分', DateName(second,GetDate()) as '秒' print DateName(second,GetDate())+'1'
格式
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') 20040912110608 select CONVERT(varchar(12) , getdate(), 111 ) 2004/09/12 select CONVERT(varchar(12) , getdate(), 112 ) 20040912 select CONVERT(varchar(12) , getdate(), 102 ) 2004.09.12 select CONVERT(varchar(12) , getdate(), 101 ) 09/12/2004 select CONVERT(varchar(12) , getdate(), 103 ) 12/09/2004 select CONVERT(varchar(12) , getdate(), 104 ) 12.09.2004 select CONVERT(varchar(12) , getdate(), 105 ) 12-09-2004 select CONVERT(varchar(12) , getdate(), 106 ) 12 09 2004 select CONVERT(varchar(12) , getdate(), 107 ) 09 12, 2004 select CONVERT(varchar(12) , getdate(), 108 ) 11:06:08 select CONVERT(varchar(12) , getdate(), 109 ) 09 12 2004 1 select CONVERT(varchar(12) , getdate(), 110 ) 09-12-2004 select CONVERT(varchar(12) , getdate(), 113 ) 12 09 2004 1 select CONVERT(varchar(12) , getdate(), 114 ) 11:06:08.177
数据库时间函数
-- 查询最近一个月内的点击率大于100的记录数据: select * from t_business_product where hit_count>100 and datediff(Dd,last_date,getdate())<=30 order by id desc -- 查询最近一周内的点击率大于100的记录数据: select * from t_business_product where hit_count>100 and datediff(Dw,last_date,getdate())<=7 order by id desc -- 你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符“%”, -- 你可以匹配一个特定日期的所有时间。这里有一个例子: --这个语句可以匹配正确的记录。因为通配符“%”代表了任何时间。 Select * FROM weblog Where entrydate LIKE ‘Dec 25 2000%’
12. 删除索引
--声明数据库引用 use 数据库名; go --删除索引 if exists(select * from sysindexes where name=索引名称) drop index 索引名称 on 表名; go 示例: --声明数据库引用 use testss; go --删除索引 if exists(select * from sysindexes where name='pathxmlindex') drop index pathxmlindex on test1; go
13. 修改索引名
alter index <旧索引名> rename to <新索引名> alter index Stusno rename to Stu
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)