本篇內(nèi)容主要講解“總結(jié)簡(jiǎn)單實(shí)用的SQL腳本”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“總結(jié)簡(jiǎn)單實(shí)用的SQL腳本”吧!
創(chuàng)新互聯(lián)是一家專業(yè)提供旅順口企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為旅順口眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
1、行轉(zhuǎn)列的用法PIVOT
CREATE table test (id int,name nvarchar(20),quarter int,number int) insert into test values(1,N'蘋果',1,1000) insert into test values(1,N'蘋果',2,2000) insert into test values(1,N'蘋果',3,4000) insert into test values(1,N'蘋果',4,5000) insert into test values(2,N'梨子',1,3000) insert into test values(2,N'梨子',2,3500) insert into test values(2,N'梨子',3,4200) insert into test values(2,N'梨子',4,5500) select * from test
結(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
(提示:可以左右滑動(dòng)代碼)
結(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('12345678@qq.com','1234567','******')
結(jié)果:
4、查詢一個(gè)表內(nèi)相同紀(jì)錄 HAVING
如果一個(gè)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é)果:
對(duì)比一下發(fā)現(xiàn),ID為1,2的被過濾掉了,因?yàn)樗麄冎挥幸粭l記錄
如果幾個(gè)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)了這個(gè)結(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(shí)會(huì)自動(dòng)創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。)
語法4:使用導(dǎo)入導(dǎo)出功能進(jìn)行全表復(fù)制。如果是使用【編寫查詢以指定要傳輸?shù)臄?shù)據(jù)】,那么在大數(shù)據(jù)表的復(fù)制就會(huì)有問題?因?yàn)閺?fù)制到一定程度就不再動(dòng)了,內(nèi)存爆了?它也沒有寫入到表中。而使用上面3種語法直接執(zhí)行是會(huì)馬上刷新到數(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í)間數(shù)據(jù)。
語法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 規(guī)定目標(biāo)數(shù)據(jù)類型(帶有可選的長(zhǎng)度)。data_to_be_converted 含有需要轉(zhuǎn)換的值。style 規(guī)定日期/時(shí)間的輸出格式。
可以使用的 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
到此,相信大家對(duì)“總結(jié)簡(jiǎn)單實(shí)用的SQL腳本”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享標(biāo)題:總結(jié)簡(jiǎn)單實(shí)用的SQL腳本
文章位置:http://jinyejixie.com/article6/podsog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、建站公司、網(wǎng)站營(yíng)銷、Google、小程序開發(fā)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)