SQL常用脚本整理,你保存了吗?

​工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。

1、行转列的用法PIVOT

(,(),,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
*

结果:

select ID,NAME,
[1]as'一季度',
[2]as'二季度',
[3]as'三季度',
[4]as'四季度'
from
test
pivot
(
sum(number)
for quarter in
([1],[2],[3],[4])
)
as pvt

结果:

2、列转行的用法UNPIOVT

createtable test2
(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)
insertinto test2 values(1,'苹果',1000,2000,4000,5000)
insertinto test2 values(2,'梨子',3000,3500,4200,5500)
select*from test2

(提示:可以左右滑动代码)

结果:

--列转行
select id,name,quarter,number
from
test2
unpivot
(
number
for quarter in
([Q1],[Q2],[Q3],[Q4])
)
as unpvt

结果:

3、字符串替换SUBSTRING/REPLACE

SELECT REPLACE('abcdefg',SUBSTRING('abcdefg',2,4),'**')

结果:

SELECT REPLACE('13512345678',SUBSTRING('13512345678',4,11),'********')

结果:

SELECT REPLACE('[email protected]','1234567','******')

结果:

4、查询一个表内相同纪录 HAVING

如果一个ID可以区分的话,可以这么写

SELECT*FROM HR.Employees

结果:

select*from HR.Employees
where title in(
select title from HR.Employees
groupby title
havingcount(1)>1)

​结果:

对比一下发现,ID为1,2的被过滤掉了,因为他们只有一条记录

如果几个ID才能区分的话,可以这么写

select*from HR.Employees
where title+titleofcourtesy in
(select title+titleofcourtesy
from HR.Employees
groupby title,titleofcourtesy
havingcount(1)>1)

​结果:

title在和titleofcourtesy进行拼接后符合条件的就只有ID为6,7,8,9的了

5、把多行SQL数据变成一条多列数据,即新增列

SELECT
id,
name,
SUM(CASE WHEN quarter=1 THEN number ELSE 0 END)'一季度',
SUM(CASE WHEN quarter=2 THEN number ELSE 0 END)'二季度',
SUM(CASE WHEN quarter=3 THEN number ELSE 0 END)'三季度',
SUM(CASE WHEN quarter=4 THEN number ELSE 0 END)'四季度'
FROM test
GROUPBY id,name

结果:

我们将原来的4列增加到了6列。细心的朋友可能发现了这个结果和上面的行转列怎么一模一样?其实上面的行转列是省略写法,这种是比较通用的写法。 

6、表复制

语法1:Insert INTO table(field1,field2,…) values(value1,value2,…)

语法2:Insert into Table2(field1,field2,…) select value1,value2,… from Table1

(要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。)

语法3:SELECT vale1, value2 into Table2 from Table1

(要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。)

语法4:使用导入导出功能进行全表复制。如果是使用【编写查询以指定要传输的数据】,那么在大数据表的复制就会有问题?因为复制到一定程度就不再动了,内存爆了?它也没有写入到表中。而使用上面3种语法直接执行是会马上刷新到数据库表中的,你刷新一下mdf文件就知道了。

7、利用带关联子查询Update语句更新数据

--方法1:
Update Table1
set c =(select c from Table2 where a = Table1.a)
where c isnull

--方法2:
update A
set newqiantity=B.qiantity
from A,B
where A.bnum=B.bnum

--方法3:
update
(select A.bnum,A.newqiantity,B.qiantityfrom A
left join B on A.bnum=B.bnum)AS C
set C.newqiantity= C.qiantity
where C.bnum='001'

8、连接远程服务器

--方法1:
select*from openrowset(
'SQLOLEDB',
'server=192.168.0.1;uid=sa;pwd=password',
'SELECT * FROM dbo.test')

--方法2:
select*from openrowset(
'SQLOLEDB',
'192.168.0.1';
'sa';
'password',
'SELECT * FROM dbo.test')

当然也可以参考以前的示例,建立DBLINK进行远程连接

9、Date 和 Time 样式 CONVERT

CONVERT() 函数是把日期转换为新数据类型的通用函数。

CONVERT() 函数可以用不同的格式显示日期/时间数据。

语法

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

可以使用的 style 值:

Style ID

Style 格式

100 或者 0

mon dd yyyy hh:miAM (或者 PM)

101

mm/dd/yy

102

yy.mm.dd

103

dd/mm/yy

104

dd.mm.yy

105

dd-mm-yy

106

dd mon yy

107

Mon dd, yy

108

hh:mm:ss

109 或者 9

mon dd yyyy hh:mi:ss:mmmAM(或者 PM)

110

mm-dd-yy

111

yy/mm/dd

112

yymmdd

113 或者 13

dd mon yyyy hh:mm:ss:mmm(24h)

114

hh:mi:ss:mmm(24h)

120 或者 20

yyyy-mm-dd hh:mi:ss(24h)

121 或者 21

yyyy-mm-dd hh:mi:ss.mmm(24h)

126

yyyy-mm-ddThh:mm:ss.mmm(没有空格)

130

dd mon yyyy hh:mi:ss:mmmAM

131

dd/mm/yy hh:mi:ss:mmmAM

SELECT CONVERT(varchar(100), GETDATE(),0)
--结果:
12720209:33PM
SELECT CONVERT(varchar(100), GETDATE(),1)
--结果:
12/07/20
SELECT CONVERT(varchar(100), GETDATE(),2)
--结果:
20.12.07
SELECT CONVERT(varchar(100), GETDATE(),3)
--结果:
07/12/20
SELECT CONVERT(varchar(100), GETDATE(),4)
--结果:
07.12.20
SELECT CONVERT(varchar(100), GETDATE(),5)
--结果:
07-12-20
SELECT CONVERT(varchar(100), GETDATE(),6)
--结果:
071220
SELECT CONVERT(varchar(100), GETDATE(),7)
--结果:
1207,20
SELECT CONVERT(varchar(100), GETDATE(),8)
--结果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(),9)
--结果:
12720209:33:18:780PM
SELECT CONVERT(varchar(100), GETDATE(),10)
--结果:
12-07-20
SELECT CONVERT(varchar(100), GETDATE(),11)
--结果:
20/12/07
SELECT CONVERT(varchar(100), GETDATE(),12)
--结果:
201207
SELECT CONVERT(varchar(100), GETDATE(),13)
--结果:
0712202021:33:18:780
SELECT CONVERT(varchar(100), GETDATE(),14)
--结果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(),20)
--结果:
2020-12-0721:33:18
SELECT CONVERT(varchar(100), GETDATE(),21)
--结果:
2020-12-0721:33:18.780
SELECT CONVERT(varchar(100), GETDATE(),22)
--结果:
12/07/209:33:18 PM
SELECT CONVERT(varchar(100), GETDATE(),23)
--结果:
2020-12-07
SELECT CONVERT(varchar(100), GETDATE(),24)
--结果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(),25)
--结果:
2020-12-0721:33:18.780
SELECT CONVERT(varchar(100), GETDATE(),100)
--结果:
12720209:33PM
SELECT CONVERT(varchar(100), GETDATE(),101)
--结果:
12/07/2020
SELECT CONVERT(varchar(100), GETDATE(),102)
--结果:
2020.12.07
SELECT CONVERT(varchar(100), GETDATE(),103)
--结果:
07/12/2020
SELECT CONVERT(varchar(100), GETDATE(),104)
--结果:
07.12.2020
SELECT CONVERT(varchar(100), GETDATE(),105)
--结果:
07-12-2020
SELECT CONVERT(varchar(100), GETDATE(),106)
--结果:
07122020
SELECT CONVERT(varchar(100), GETDATE(),107)
--结果:
1207,2020
SELECT CONVERT(varchar(100), GETDATE(),108)
--结果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(),109)
--结果:
12720209:33:18:780PM
SELECT CONVERT(varchar(100), GETDATE(),110)
--结果:
12-07-2020
SELECT CONVERT(varchar(100), GETDATE(),111)
--结果:
2020/12/07
SELECT CONVERT(varchar(100), GETDATE(),112)
--结果:
20201207
SELECT CONVERT(varchar(100), GETDATE(),113)
--结果:
0712202021:33:18:780
SELECT CONVERT(varchar(100), GETDATE(),114)
--结果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(),120)
--结果:
2020-12-0721:33:18
SELECT CONVERT(varchar(100), GETDATE(),121)
--结果:
2020-12-0721:33:18.780

以上内容,在工作中比较常用,能记住最好。不能记住就收藏起来,在需要的时候查询即可。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/239388.html<

(0)
运维的头像运维
上一篇2025-04-23 09:30
下一篇 2025-04-23 09:31

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注