sql server(常用)
普通用法
//生成 uuid 并轉(zhuǎn)為小寫 select LOWER(SUBSTRING(uuid,1,8)+'-'+SUBSTRING(uuid,10,4)+'-'+SUBSTRING(uuid,15,4)+'-'+SUBSTRING(uuid,20,4)+'-'+SUBSTRING(uuid,25,12)) from (select cast(NEWID() as varchar(36)) as uuid) s //ea52a7bb-a2aa-44b8-be28-5ebc64defcf9//獲取時分秒 select DateName(hour,GetDate())+ DateName(minute,GetDate())+DateName(second,GetDate()) //143054//1000-9999隨機數(shù) select floor(9000*RAND()+1000)//日期格式化 select GETDATE() //2019-02-12 14:30:16.763 Select CONVERT(varchar(100), GETDATE(), 8) //10:57:46 Select CONVERT(varchar(100), GETDATE(), 12) //060516 Select CONVERT(varchar(100), GETDATE(), 20) //2006-05-16 10:57:47 Select CONVERT(varchar(100), GETDATE(), 21) //2006-05-16 10:57:47.157 Select CONVERT(varchar(100), GETDATE(), 23) //2006-05-16 Select CONVERT(varchar(100), GETDATE(), 24) //10:57:47 Select CONVERT(varchar(100), GETDATE(), 25) //2006-05-16 10:57:47.250 Select CONVERT(varchar(100), GETDATE(), 102)//2006.05.16 Select CONVERT(varchar(100), GETDATE(), 111)//2006/05/16 Select CONVERT(varchar(100), GETDATE(), 112)//20060516進(jìn)階
order by
group by
我們經(jīng)常會使用group by對查詢的結(jié)果進(jìn)行去重,但是在使用的過程中一定要確保 group by 里面要只是有一個唯一性的條件,否則極有可能把需要的條目去重了,導(dǎo)致查詢結(jié)果異常,而且這個問題排查難度不小
聯(lián)表查詢
SQL查詢多列合并一列
select ID,hosID +'/'+ hosCode +'/'+ name as '診所編號/診所Code/醫(yī)生項目' from Doctor where hosCode = 'xxxx' //return: 71bfc474-7725-e8fb-ecbd-a204bbaxxxxx 15xx/A75xxx/宋xxSQL查詢將多行合并成一行(轉(zhuǎn)載)
//將param1中自startIndex(SQL中都是從1開始,而非0)起,刪除length個字符,然后用param2替換刪掉的字符。 stuff(param1, startIndex, length, param2)param1:一個字符數(shù)據(jù)表達(dá)式。param1可以是常量、變量,也可以是字符列或二進(jìn)制數(shù)據(jù)列。
startIndex:一個整數(shù)值,指定刪除和插入的開始位置。如果 startIndex或 length 為負(fù),則返回空字符串。如果startIndex比param1長,則返回空字符串。startIndex可以是 bigint 類型。
length:一個整數(shù),指定要刪除的字符數(shù)。如果 length 比param1長,則最多刪除到param1 中的最后一個字符。length 可以是 bigint 類型。
例如:
select STUFF('abcdefg',1,0,'1234') --結(jié)果為'1234abcdefg' select STUFF('abcdefg',1,1,'1234') --結(jié)果為'1234bcdefg' select STUFF('abcdefg',2,1,'1234') --結(jié)果為'a1234cdefg' select STUFF('abcdefg',2,2,'1234') --結(jié)果為'a1234defg'拓展:for xml path,將查詢結(jié)果集以XML形式展現(xiàn)
現(xiàn)在想把兩條數(shù)據(jù)通過PerworkSampleInfoId和Barcode合并成一條
select ID,PerworkSampleInfoId,Barcode, ApplyItemId,ApplyItemName,ItemPrice from Perwork_SampleItem where Barcode = 'A75004xxxxxx'select PerworkSampleInfoId,Barcode,(select STUFF((select ',' + ApplyItemName from Perwork_SampleItem where Barcode = a.Barcode for xml path('')),1,1,'' )) as ApplyItemNames,(select STUFF ((select sum(ItemPrice) from Perwork_SampleItem where Barcode = a.Barcode),1,0,''))as totalItemPrice from Perwork_SampleItem a where Barcode = 'A75004xxxxxx' group by PerworkSampleInfoId,Barcode
視圖
存儲過程
優(yōu)點:
1.存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
2.當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(如對多個表進(jìn)行Update,Insert,Query,Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
3.存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量
4.安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)
缺點:
1.如果更改范圍大到需要對輸入存儲過程的參數(shù)進(jìn)行更改,或者要更改由其返回的數(shù)據(jù),則您仍需要更新程序集中的代碼以添加參數(shù)、更新 GetValue() 調(diào)用,等等,這時候估計比較繁瑣了。
2.可移植性差
由于存儲過程將應(yīng)用程序綁定到 SQL Server,因此使用存儲過程封裝業(yè)務(wù)邏輯將限制應(yīng)用程序的可移植性。
基本用法:
//創(chuàng)建存儲過程 use WEHealth go create procedure pro_test @_code varchar(50) as IF ( @_code IS NOT NULL )select *from Hospitalwhere Code like '%'+@_code+'%';ELSEselect *from Hospital; //調(diào)用存儲過程 exec pro_test '101999'; exec pro_test null;函數(shù)
表值函數(shù)
標(biāo)量值函數(shù)
總結(jié)
以上是生活随笔為你收集整理的sql server(常用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React-事件机制杂记
- 下一篇: DLA实现跨地域、跨实例的多Analyt