數據庫:整理四個實用的SQLServer腳本函數

今天給大家分享小編自己日常工作積累的四個SQLServer腳本函數

?

目錄

1、字符串指定字符分割為list

2、數字去掉末尾的0

3、創建表、視圖、函數、存儲過程判斷是否存在

4、金額轉換為大寫


1、字符串指定字符分割為list

功能:主要適用于數據庫字段存儲字段用逗號等分隔符存儲,可以轉換為list然后用子查詢使用。

-- 字符串指定字符分割為list
CREATE FUNCTION [dbo].[splitl] (@String VARCHAR(MAX),@Delimiter VARCHAR(MAX)
) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS
BEGINDECLARE @idx INT=1DECLARE @slice VARCHAR(MAX) IF LEN(@String) < 1 OR LEN(ISNULL(@String,'')) = 0RETURNWHILE @idx != 0BEGINSET @idx = CHARINDEX(@Delimiter,@String)IF @idx != 0SET @slice = LEFT(@String,@idx - 1)ELSESET @slice = @StringIF LEN(@slice) > 0INSERT INTO @temptable(items) VALUES(@slice)SET @String = RIGHT (@String, LEN(@String) - @idx)IF LEN(@String) = 0BREAKENDRETURN
END
GO
-- 調用方式 
SELECT * FROM dbo.splitl('aaa|bbb|ccc','|')

2、字段去掉數值末尾的0

有些前端頁面展示有時候需要去掉末尾多余的0,可以在SQL語句查詢的時候調用該函數。

-- 數字去掉末尾的0
CREATE function [dbo].[ClearZero](@inValue varchar(50))
returns varchar(50)
as
begin
declare @returnValue varchar(20)
if(@inValue='')set @returnValue='' --空的時候為空
else if (charindex('.',@inValue) ='0')set @returnValue=@inValue --針對不含小數點的
else if ( substring(reverse(@inValue),patindex('%[^0]%',
reverse(@inValue)),1)='.')set @returnValue =left(@inValue,len(@inValue)-patindex('%[^0]%',reverse(@inValue))) --針對小數點后全是0的elseset @returnValue =left(@inValue,len(@inValue)- patindex('%[^0]%.%',reverse(@inValue))+1) --其他任何情形
return @returnValue
end
--調用示例
SELECT dbo.ClearZero(258.250300)

3、創建表、視圖、函數、存儲過程判斷是否存在

功能:執行腳本判斷是否存在,這樣可以多個腳本一次性執行了。

/*判斷函數/方法是否存在,若存在則刪除函數/方法*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE name = 'Func_Name') DROP FUNCTION Func_Name;GO
--創建函數/方法
CREATE FUNCTION Func_Name
(@a INT
)
RETURN INT
AS
BEGIN
--coding
END
GO
/*判斷存儲過程是否存在,若存在則刪除存儲過程*/
IF EXISTS (OBJECT_NAME('Proc_Name','P') IS NOT NULL 
DROP PROC Proc_Name;
GO
--創建存儲過程
CREATE PROC Proc_Name
AS SELECT * FROM Table_Name
GO
/*判斷數據表是否存在,若存在則刪除數據表*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE name = 'Table_Name')DROP VIEW Table_Name;
GO
--創建數據表
CREATE TABLE Table_Name
(Id INT PRIMARY KEY NOT NULL
)
/*判斷視圖是否存在,若存在則刪除視圖*/
IF EXISTS (SELECT * FROM sys.views WHERE name = 'View_Name') 
DROP VIEW View_Name 
GO
--創建視圖
CREATE VIEW View_Name ASSELECT SELECT * FROM table_name
GO

4、金額轉換為大寫

功能:適用一些發票打印、財務憑證等場景,需要把金額轉換為大寫功能

/*說明:數字金額轉中文金額示例:187.4 轉成 壹佰捌拾柒圓肆角整
*/CREATE FUNCTION [dbo].[CNumeric](@num numeric(14,2))returns nvarchar(100)
BEGINDeclare @n_data nvarchar(20),@c_data nvarchar(100),@n_str nvarchar(10),@i intSet @n_data=right(space(14)+cast(cast(abs(@num*100) as bigint) as nvarchar(20)),14)Set @c_data=''Set @i=1WHILE @i<=14Beginset @n_str=substring(@n_data,@i,1)if @n_str<>''beginIF not ((SUBSTRING(@n_data,@i,2)= '00') or((@n_str= '0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))SET @c_data=@c_data+SUBSTRING( N'零壹貳叁肆伍陸柒捌玖',CAST(@n_str AS int)+1,1)IF not ((@n_str= '0') and (@i <> 4) and (@i <> 8) and (@i <> 12))SET @c_data=@c_data+SUBSTRING( N'仟佰拾億仟佰拾萬仟佰拾圓角分',@i,1)IF SUBSTRING(@c_data,LEN(@c_data)-1,2)= N'億萬'SET @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)ENDSET @i=@i+1ENDIF @num <0SET @c_data= '(負數)'+@c_dataIF @num=0SET @c_data= '零圓'IF @n_str= '0'SET @c_data=@c_data+ '整'RETURN(@c_data)
END

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270995.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python排名分析_用Python分析了近幾年胡潤排行榜,我酸了……

10 月 20 日&#xff0c;胡潤研究院發布《2020 胡潤百富榜》&#xff0c;也就是富富富豪排行榜杭州的馬云毫無懸念的再次摘下中國首富桂冠&#xff0c;深圳的馬化騰位列第二榜單被我翻爛了&#xff0c;還是沒有找到我的名字&#xff0c;難道是被遺漏了嗎&#xff1f;&#xff1…

sublime代碼片段

創建方法&#xff1a;Tools > New Snippet 這時你會看到如下示例代碼&#xff1a; <snippet><content><![CDATA[Hello, ${1:this} is a ${2:snippet}.]]></content><!-- Optional: Set a tabTrigger to define how to trigger the snippet -->…

定義DO/DTO/VO等POJO類時,不要設定任何屬性默認值

定義DO/DTO/VO等POJO類時&#xff0c;不要設定任何屬性默認值

php事務 面向對象,關于PHP面向對象的事務腳本模式

下面為大家帶來一篇PHP面向對象之事務腳本模式(詳解)。內容挺不錯的&#xff0c;現在就分享給大家&#xff0c;也給大家做個參考。如下所示&#xff1a;/*事務腳本模式: 類似于thinkphp中的model層&#xff0c;或者說就是操作數據庫的類。個人覺得實踐中使用起來還是挺簡單方便…

分布式數據庫相關概念介紹

1、分布式數據庫的概念分布式數據庫系統&#xff08;Distributed Database System&#xff0c;DDBS&#xff09;是針對面向地理上分散&#xff0c;而管理上有需要不同程度集中管理的需求而提出的一種數據庫管理信息系統。2、分布式數據庫系統組成LDBMS(Local DBMS)&#xff1a;…

社會管理網格化 源碼_為什么說網格化管理是基層社會治理的有效武器

在社會治安綜合治理中網格化管理是當前各地加強基層社會治理的一種有效“武器”。為什么要說網格化管理是基層社會治理的有效“武器”&#xff1f;這就要為大家講講以下幾點了&#xff0c;好讓大家清楚的明白為什么。網格化管理適應當代社會的基本特性。網格化服務管理是當前城…

【Time系列一】datetime的妙用

今天在弄個自動關機小腳本的時候&#xff0c;遇到了時間轉換的問題&#xff0c;也難怪&#xff0c;以前沒學過&#xff0c; 不能怪我不會哦! 首先&#xff0c;先學會打印出當前時間的幾種方式 參考開源社區: http://my.oschina.net/u/1032854/blog/198179#OSC_h1_3 菜鳥編程:…

循環體內,字符串的連接方式,使用StringBuilder的append方法進行擴展

循環體內&#xff0c;字符串的連接方式&#xff0c;使用StringBuilder的append方法進行擴展

JS樹結構操作:查找、遍歷、篩選、樹結構和列表結構相互轉換

經常有同學問樹結構的相關操作&#xff0c;也寫了很多次&#xff0c;在這里總結一下 JS 樹形結構一些操作的實現思路&#xff0c;并給出了簡潔易懂的代碼實現。本文內容結構大概如下&#xff1a;JS樹結構相關操作1遍歷樹結構1. 樹結構介紹JS中樹結構一般是類似于這樣的結構&…

python框架django的使用_Django框架的基本使用,若依框架

Django框架的基本使用&#xff0c;若依框架Django框架的基本使用Django是一個功能強大的web框架框架模式1、MVC和MTV框架MVC&#xff1a;Web服務器開發領域里著名的MVC模式&#xff0c;所謂MVC就是把Web應用分為模型(M)&#xff0c;控制器(C)和視圖(V)三層&#xff0c;結構說明…

初學js

今天開始接觸js&#xff0c;知道了js的功能以及學習的意義&#xff0c; 今天從命名的規范和數值的規則就能看出js是1門非常嚴謹的課程&#xff0c;只有做好細節才能體現出js的強大之處&#xff0c; var是定義一個名字 var name1&#xff1b; 定義了還能賦值&#xff0c;可以是數…

數據庫:SQLServer中GUID用法介紹

今天給大家分享一下SQLServer中生成GUID的用法。一、NEWID用法NEWID()作用是生成無順序的GUID字符串。用法如下&#xff1a;SELECT NEWID() --生成36位的GUIDSELECT REPLACE(newid(), -, ) -- 生成32 位的GUID二、NEWSEQUENTIALID用法1、NEWSEQUENTIALID是什么&#xff1f;在指…

oracle po:默認申請分組,PR自動創建PO采購訂單:強制按照PR行進行分組

有時候&#xff0c;需要實現強制按照PR行來自動創建PO。舉個例子&#xff1a;假設2張PR&#xff0c;同一個物料&#xff0c;同一個需求日期等等的&#xff0c;在合并采購訂單的時候&#xff0c;希望是2個PO行。按照標準功能的處理邏輯&#xff0c;如果是同一個物料需求日期(配置…

cserialport 循環發送信號_C++信號處理

免費C語言教程&#xff1a;阿里云大學——開發者課堂(點擊文章最下方“了解更多”)信號是由操作系統傳給進程的中斷&#xff0c;會提早終止一個程序。在 UNIX、LINUX、Mac OS X 或 Windows 系統上&#xff0c;可以通過按 CtrlC 產生中斷。有些信號不能被程序捕獲&#xff0c;但…

Javascript第一天

引入的三種方法&#xff1a; 1、將javascript代碼插入html文檔<head>部分的<script>標簽中 例&#xff1a;<head> <script type“text/javascript”> //javascript 代碼 alert(‘hello world’); </script> </head> 2、將javascript代碼存…

不要在foreach循環里進行元素的remove/add操作。remove元素請使用iteratot方式,如果并發操作,需要對Iterator對象加鎖

不要在foreach循環里進行元素的remove/add操作。remove元素請使用iteratot方式&#xff0c;如果并發操作&#xff0c;需要對Iterator對象加鎖

Win7和Win10操作系統優劣對比,看完你就懂了!

一直以來&#xff0c;針對微軟的Windows系統討論最熱烈的莫過于win7和win10系統了&#xff0c;兩者究竟誰好誰壞&#xff1f;小編今天就帶大家從幾個不同的角度分析兩者的優缺點&#xff0c;如有不對&#xff0c;歡迎大家指正&#xff01;一、win 7系統的幾大特點&#xff1a;1…

linux bash命令找不到,Linux下提示命令找不到:bash:command not found

Linux下輸入某些命令時會提示&#xff1a;bash:command not found。首先&#xff0c;查看$PATH中是否包含了這些命令。$PATH&#xff1a;決定了shell到哪些目錄中去尋找命令或程序&#xff0c;PATH值是一系列的目錄。當運行程序時&#xff0c;linux到這些目錄下搜索進行編譯鏈接…

dhcp 續約review報文_Linux的私房菜 DHCP

譯DHCP服務DHCP的全稱是動態主機配置協議&#xff0c;用來自動給客戶機分配TCP/IP信息的網絡協議。Dynamic Host Configuration Protocol&#xff0c;前身是BOOTP協議&#xff0c;是一個局域網的網絡協議&#xff0c;使用UDP協議工作&#xff0c;統一使用兩個IANA分配的端口&am…