平时常用sql
2024-10-11 16:21:43
总结一下平时用到最多的sql语句
1.特殊日期
--今天凌晨
SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0)
--明天凌晨
SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE())+1,0)
--当周周一(每周从周日开始)
SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
--当月的第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)
--当月的最后一天
SELECT DATEADD(dd,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE())+1,0))
--今年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
--今年的最后一天
SELECT DATEADD(dd,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0))
2.字符串处理
--去除空格
SELECT LTRIM(col1),RTRIM(col2),LTRIM(RTRIM(col3)) FROM tableName SELECT
SUBSTRING(col1,3,2) --从第3个字符开始截取2个,得到截取的2个字符
,STUFF(col2,3,2,'')--从第3个字符开始删除2个,得到剩下字符
,STUFF(col3,3,2,'XXX')--从第3个字符开始,将第3、4两个字符替换成XXX
,REPLACE(col4,'old','new')--将col4中的old全部替换成new
FROM tableName --将列col1用,拼接起来
SELECT STUFF((SELECT ','+col1 FROM tableName WHERE 过滤条件 FOR XML PATH('')),1,1,'') --多位流水号,用0或空格补充 例如A000001,A000002……,前缀可为固定字符,或者可变的年、月、日等
DECLARE @flowNo AS VARCHAR(10)
DECLARE @nextNo AS int SELECT @flowNo = MAX(flowNo) FROM tableName WHERE 过滤条件
IF(@flowNo IS null)
SET @flowNo = 'A000001'
ELSE
BEGIN
SET @nextNo = RIGHT(@flowNo,6)+1
SET @flowNo = LEFT(@flowNo,1)+REPLICATE('',6-LEN(@nextNo))+CONVERT(VARCHAR(6),@nextNo)
END
SELECT @flowNo;--要获取的流水号 --年 2001对应1,2009对应9,2010对应A,2035对应Z,2035之后的可自行调整
SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',(YEAR(GETDATE())-2000)%36,1) --月 10月,11月,12月分别对应A,B,C
SELECT SUBSTRING('123456789ABC',MONTH(GETDATE()),1) --月 英文简写
SELECT SUBSTRING('JanFebMarAprMayJunJulAugSepOctNovDec',(MONTH(GETDATE())-1)*3+1,3) --日 1号对应1,9号对应9,10号对应A,以此类推
SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUV',DAY(GETDATE()),1)
3.辅助
--去除重复数据,数据表中有很多重复数据,如果其中col1,col2,col3,col4,col5可以表示出每一组重复数据
;WITH cte AS
(SELECT col1,col2,col3,col4,col5
,ROW_NUMBER()OVER(PARTITION BY col1,col2,col3,col4,col5 ORDER BY col1) AS rn
FROM tableName)
DELETE FROM cte WHERE rn > 1 --快速打开存储过程、视图等
sp_helptext 存储过程名称 --名称前不要加dbo.等所有者
sp_helptext 视图名称 --名称前不要加dbo.等所有者 --用到了某些字符串的视图,存储过程
SELECT a.name,b.[text]
FROM sysobjects a
INNER JOIN syscomments b ON a.id = b.id
WHERE b.[text] LIKE '%你要查的字符串%'
AND a.xtype='v'--'p' --获取表tableName中所有的列名,并用组合。写insert的时候简直不要太爽
SELECT STUFF((SELECT ','+name
FROM syscolumns
WHERE id = OBJECT_ID('tableName')
ORDER BY colorder --colorder:按照列的添加顺序 name:按照列名顺序
FOR xml path('')),1,1,'')
最新文章
- linux输入子系统(input subsystem)之按键输入和LED控制
- js之内置对象
- spring中context:property-placeholder/元素 转载
- linux之SQL语句简明教程---WHERE
- Win下JDK的安装和简单使用教程
- mysql 数据库扫描行数
- controller分支实现前台显示弹框同时转发
- 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。
- Codeforces Round #442 (Div. 2) E Danil and a Part-time Job (dfs序加上一个线段树区间修改查询)
- test4
- BZOJ.1028.[JSOI2007]麻将(贪心)
- css 进度条
- ExtJs Ext.data.Store 处理
- AtCoder Grand Contest 029 Solution
- json test
- [您有新的未分配科技点] 无旋treap:从单点到区间(例题 BZOJ1500&;NOI2005 维护数列 )
- NOS服务监控实践
- Java 的多态
- xise官方网站|xise最新版下载|-xise
- setTimeout()的应用