摘要:如果或為負,則返回空字符串。當對數據庫進行復雜操作時如對多個表進行時,可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。可移植性差由于存儲過程將應用程序綁定到,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。
普通用法
//生成 uuid 并轉為小寫 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隨機數 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進階 order by group by
我們經常會使用group by對查詢的結果進行去重,但是在使用的過程中一定要確保 group by 里面要只是有一個唯一性的條件,否則極有可能把需要的條目去重了,導致查詢結果異常,而且這個問題排查難度不小
聯表查詢 SQL查詢多列合并一列select ID,hosID +"/"+ hosCode +"/"+ name as "診所編號/診所Code/醫生項目" from Doctor where hosCode = "xxxx" //return: 71bfc474-7725-e8fb-ecbd-a204bbaxxxxx 15xx/A75xxx/宋xxSQL查詢將多行合并成一行(轉載)
//將param1中自startIndex(SQL中都是從1開始,而非0)起,刪除length個字符,然后用param2替換刪掉的字符。 stuff(param1, startIndex, length, param2)
param1:一個字符數據表達式。param1可以是常量、變量,也可以是字符列或二進制數據列。
startIndex:一個整數值,指定刪除和插入的開始位置。如果 startIndex或 length 為負,則返回空字符串。如果startIndex比param1長,則返回空字符串。startIndex可以是 bigint 類型。
length:一個整數,指定要刪除的字符數。如果 length 比param1長,則最多刪除到param1 中的最后一個字符。length 可以是 bigint 類型。
例如:
select STUFF("abcdefg",1,0,"1234") --結果為"1234abcdefg" select STUFF("abcdefg",1,1,"1234") --結果為"1234bcdefg" select STUFF("abcdefg",2,1,"1234") --結果為"a1234cdefg" select STUFF("abcdefg",2,2,"1234") --結果為"a1234defg"
拓展:for xml path,將查詢結果集以XML形式展現
現在想把兩條數據通過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視圖 存儲過程
優點:
1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
2.當對數據庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少數據庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
缺點:
1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。
2.可移植性差
由于存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。
基本用法:
//創建存儲過程 use WEHealth go create procedure pro_test @_code varchar(50) as IF ( @_code IS NOT NULL ) select * from Hospital where Code like "%"+@_code+"%"; ELSE select * from Hospital; //調用存儲過程 exec pro_test "101999"; exec pro_test null;函數 表值函數 標量值函數
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/17916.html
摘要:在阿里云平臺上,可通過自帶的鏡像市場實現一鍵部署系統的數據庫,完美解決耗時長部署易出錯的缺陷。操作步驟登錄云服務器管理控制臺。單擊左側導航中的云服務器創建實例。在ECS上部署數據庫 數據庫是依照某種數據模型組織起來并存放二級存儲器中的數據集合。這種數據集合具有如下特點:盡可能不重復,以最優方式為某個特定組織的多種應用服務,其數據結構獨立于使用它的應用程序,對數據的增、刪、改和檢索由統一軟件進...
閱讀 3791·2023-04-25 21:09
閱讀 3138·2021-10-20 13:48
閱讀 3046·2021-09-24 10:25
閱讀 2945·2021-08-21 14:08
閱讀 1802·2019-08-30 15:56
閱讀 991·2019-08-30 15:52
閱讀 1857·2019-08-29 14:11
閱讀 3575·2019-08-29 11:01