新聞中心
?工作中有許多比較常用的SQL腳本,今天開始分幾章分享給大家。

創(chuàng)新互聯(lián)公司為企業(yè)級客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都app軟件開發(fā)、重慶小程序開發(fā)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個作品的質(zhì)量和創(chuàng)作周期,同時每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。
1、行轉(zhuǎn)列的用法PIVOT
( , (), , )
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
(,N,,)
*
結(jié)果:
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
結(jié)果:
2、列轉(zhuǎn)行的用法UNPIOVT
create table test2
(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)
insert into test2 values(1,'蘋果',1000,2000,4000,5000)
insert into test2 values(2,'梨子',3000,3500,4200,5500)
select * from test2
(提示:可以左右滑動代碼)
結(jié)果:
--列轉(zhuǎn)行
select id,name,quarter,number
from
test2
unpivot
(
number
for quarter in
([Q1],[Q2],[Q3],[Q4])
)
as unpvt
結(jié)果:
3、字符串替換SUBSTRING/REPLACE
SELECT REPLACE('abcdefg',SUBSTRING('abcdefg',2,4),'**')結(jié)果:
SELECT REPLACE('13512345678',SUBSTRING('13512345678',4,11),'********')結(jié)果:
SELECT REPLACE('[email protected]','1234567','******')結(jié)果:
4、查詢一個表內(nèi)相同紀(jì)錄 HAVING
如果一個ID可以區(qū)分的話,可以這么寫
SELECT * FROM HR.Employees
結(jié)果:
select * from HR.Employees
where title in (
select title from HR.Employees
group by title
having count(1)>1)
?結(jié)果:
對比一下發(fā)現(xiàn),ID為1,2的被過濾掉了,因?yàn)樗麄冎挥幸粭l記錄
如果幾個ID才能區(qū)分的話,可以這么寫
select * from HR.Employees
where title+titleofcourtesy in
(select title+titleofcourtesy
from HR.Employees
group by title,titleofcourtesy
having count(1)>1)
?結(jié)果:
title在和titleofcourtesy進(jìn)行拼接后符合條件的就只有ID為6,7,8,9的了
5、把多行SQL數(shù)據(jù)變成一條多列數(shù)據(jù),即新增列
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
GROUP BY id,name
結(jié)果:
我們將原來的4列增加到了6列。細(xì)心的朋友可能發(fā)現(xiàn)了這個結(jié)果和上面的行轉(zhuǎn)列怎么一模一樣?其實(shí)上面的行轉(zhuǎn)列是省略寫法,這種是比較通用的寫法。
6、表復(fù)制
語法1:Insert INTO table(field1,field2,...) values(value1,value2,...)
語法2:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
(要求目標(biāo)表Table2必須存在,由于目標(biāo)表Table2已經(jīng)存在,所以我們除了插入源表Table1的字段外,還可以插入常量。)
語法3:SELECT vale1, value2 into Table2 from Table1
(要求目標(biāo)表Table2不存在,因?yàn)樵诓迦霑r會自動創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。)
語法4:使用導(dǎo)入導(dǎo)出功能進(jìn)行全表復(fù)制。如果是使用【編寫查詢以指定要傳輸?shù)臄?shù)據(jù)】,那么在大數(shù)據(jù)表的復(fù)制就會有問題?因?yàn)閺?fù)制到一定程度就不再動了,內(nèi)存爆了?它也沒有寫入到表中。而使用上面3種語法直接執(zhí)行是會馬上刷新到數(shù)據(jù)庫表中的,你刷新一下mdf文件就知道了。
7、利用帶關(guān)聯(lián)子查詢Update語句更新數(shù)據(jù)
--方法1:
Update Table1
set c = (select c from Table2 where a = Table1.a)
where c is null
--方法2:
update A
set newqiantity=B.qiantity
from A,B
where A.bnum=B.bnum
--方法3:
update
(select A.bnum ,A.newqiantity,B.qiantity from A
left join B on A.bnum=B.bnum) AS C
set C.newqiantity = C.qiantity
where C.bnum ='001'
8、連接遠(yuǎn)程服務(wù)器
--方法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')
當(dāng)然也可以參考以前的示例,建立DBLINK進(jìn)行遠(yuǎn)程連接
9、Date 和 Time 樣式 CONVERT
CONVERT() 函數(shù)是把日期轉(zhuǎn)換為新數(shù)據(jù)類型的通用函數(shù)。
CONVERT() 函數(shù)可以用不同的格式顯示日期/時間數(shù)據(jù)。
語法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 規(guī)定目標(biāo)數(shù)據(jù)類型(帶有可選的長度)。data_to_be_converted 含有需要轉(zhuǎn)換的值。style 規(guī)定日期/時間的輸出格式。
可以使用的 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)
--結(jié)果:
12 7 2020 9:33PM
SELECT CONVERT(varchar(100), GETDATE(), 1)
--結(jié)果:
12/07/20
SELECT CONVERT(varchar(100), GETDATE(), 2)
--結(jié)果:
20.12.07
SELECT CONVERT(varchar(100), GETDATE(), 3)
--結(jié)果:
07/12/20
SELECT CONVERT(varchar(100), GETDATE(), 4)
--結(jié)果:
07.12.20
SELECT CONVERT(varchar(100), GETDATE(), 5)
--結(jié)果:
07-12-20
SELECT CONVERT(varchar(100), GETDATE(), 6)
--結(jié)果:
07 12 20
SELECT CONVERT(varchar(100), GETDATE(), 7)
--結(jié)果:
12 07, 20
SELECT CONVERT(varchar(100), GETDATE(), 8)
--結(jié)果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 9)
--結(jié)果:
12 7 2020 9:33:18:780PM
SELECT CONVERT(varchar(100), GETDATE(), 10)
--結(jié)果:
12-07-20
SELECT CONVERT(varchar(100), GETDATE(), 11)
--結(jié)果:
20/12/07
SELECT CONVERT(varchar(100), GETDATE(), 12)
--結(jié)果:
201207
SELECT CONVERT(varchar(100), GETDATE(), 13)
--結(jié)果:
07 12 2020 21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 14)
--結(jié)果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 20)
--結(jié)果:
2020-12-07 21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 21)
--結(jié)果:
2020-12-07 21:33:18.780
SELECT CONVERT(varchar(100), GETDATE(), 22)
--結(jié)果:
12/07/20 9:33:18 PM
SELECT CONVERT(varchar(100), GETDATE(), 23)
--結(jié)果:
2020-12-07
SELECT CONVERT(varchar(100), GETDATE(), 24)
--結(jié)果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 25)
--結(jié)果:
2020-12-07 21:33:18.780
SELECT CONVERT(varchar(100), GETDATE(), 100)
--結(jié)果:
12 7 2020 9:33PM
SELECT CONVERT(varchar(100), GETDATE(), 101)
--結(jié)果:
12/07/2020
SELECT CONVERT(varchar(100), GETDATE(), 102)
--結(jié)果:
2020.12.07
SELECT CONVERT(varchar(100), GETDATE(), 103)
--結(jié)果:
07/12/2020
SELECT CONVERT(varchar(100), GETDATE(), 104)
--結(jié)果:
07.12.2020
SELECT CONVERT(varchar(100), GETDATE(), 105)
--結(jié)果:
07-12-2020
SELECT CONVERT(varchar(100), GETDATE(), 106)
--結(jié)果:
07 12 2020
SELECT CONVERT(varchar(100), GETDATE(), 107)
--結(jié)果:
12 07, 2020
SELECT CONVERT(varchar(100), GETDATE(), 108)
--結(jié)果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 109)
--結(jié)果:
12 7 2020 9:33:18:780PM
SELECT CONVERT(varchar(100), GETDATE(), 110)
--結(jié)果:
12-07-2020
SELECT CONVERT(varchar(100), GETDATE(), 111)
--結(jié)果:
2020/12/07
SELECT CONVERT(varchar(100), GETDATE(), 112)
--結(jié)果:
20201207
SELECT CONVERT(varchar(100), GETDATE(), 113)
--結(jié)果:
07 12 2020 21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 114)
--結(jié)果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 120)
--結(jié)果:
2020-12-07 21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 121)
--結(jié)果:
2020-12-07 21:33:18.780
以上內(nèi)容,在工作中比較常用,能記住最好。不能記住就收藏起來,在需要的時候查詢即可。
文章標(biāo)題:SQL常用腳本整理,你保存了嗎?
網(wǎng)站路徑:http://fisionsoft.com.cn/article/dhdeoec.html


咨詢
建站咨詢
