1、字符串指定字符分割为list
功能:主要适用于数据库字段存储字段用逗号等分隔符存储,可以转换为list然后用子查询使用。
-- 字符串指定字符分割为list
CREATE FUNCTION [dbo].[splitl] (@String VARCHAR(MAX),@Delimiter VARCHAR(MAX)
) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS
BEGINDECLARE &#64;idx INT&#61;1DECLARE &#64;slice VARCHAR(MAX) IF LEN(&#64;String) <1 OR LEN(ISNULL(&#64;String,&#39;&#39;)) &#61; 0RETURNWHILE &#64;idx !&#61; 0BEGINSET &#64;idx &#61; CHARINDEX(&#64;Delimiter,&#64;String)IF &#64;idx !&#61; 0SET &#64;slice &#61; LEFT(&#64;String,&#64;idx - 1)ELSESET &#64;slice &#61; &#64;StringIF LEN(&#64;slice) > 0INSERT INTO &#64;temptable(items) VALUES(&#64;slice)SET &#64;String &#61; RIGHT (&#64;String, LEN(&#64;String) - &#64;idx)IF LEN(&#64;String) &#61; 0BREAKENDRETURN
END
GO
-- 调用方式
SELECT * FROM dbo.splitl(&#39;aaa|bbb|ccc&#39;,&#39;|&#39;)
2、数字去掉末尾的0
功能&#xff1a;适用数字字段需要去掉末尾的零。
-- 数字去掉末尾的0
CREATE function [dbo].[ClearZero](&#64;inValue varchar(50))
returns varchar(50)
as
begin
declare &#64;returnValue varchar(20)
if(&#64;inValue&#61;&#39;&#39;)set &#64;returnValue&#61;&#39;&#39; --空的时候为空
else if (charindex(&#39;.&#39;,&#64;inValue) &#61;&#39;0&#39;)set &#64;returnValue&#61;&#64;inValue --针对不含小数点的
else if ( substring(reverse(&#64;inValue),patindex(&#39;%[^0]%&#39;,
reverse(&#64;inValue)),1)&#61;&#39;.&#39;)set &#64;returnValue &#61;left(&#64;inValue,len(&#64;inValue)-patindex(&#39;%[^0]%&#39;,reverse(&#64;inValue))) --针对小数点后全是0的elseset &#64;returnValue &#61;left(&#64;inValue,len(&#64;inValue)- patindex(&#39;%[^0]%.%&#39;,reverse(&#64;inValue))&#43;1) --其他任何情形
return &#64;returnValue
end
--调用示例
SELECT dbo.ClearZero(258.250300)
3、创建表、视图、函数、存储过程判断是否存在
功能&#xff1a;执行脚本判断是否存在&#xff0c;这样可以多个脚本一次性执行了。
/*判断函数/方法是否存在,若存在则删除函数/方法*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE name &#61; &#39;Func_Name&#39;) DROP FUNCTION Func_Name;GO
--创建函数/方法
CREATE FUNCTION Func_Name
(&#64;a INT
)
RETURN INT
AS
BEGIN
--coding
END
GO
/*判断存储过程是否存在,若存在则删除存储过程*/
IF EXISTS (OBJECT_NAME(&#39;Proc_Name&#39;,&#39;P&#39;) 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 &#61; &#39;Table_Name&#39;)DROP VIEW Table_Name;
GO
--创建数据表
CREATE TABLE Table_Name
(Id INT PRIMARY KEY NOT NULL
)
/*判断视图是否存在,若存在则删除视图*/
IF EXISTS (SELECT * FROM sys.views WHERE name &#61; &#39;View_Name&#39;)
DROP VIEW View_Name
GO
--创建视图
CREATE VIEW View_Name ASSELECT SELECT * FROM table_name
GO
4、金额转换为大写
功能&#xff1a;适用一些发票打印、财务凭证等场景&#xff0c;需要把金额转换为大写功能
/*说明&#xff1a;数字金额转中文金额示例&#xff1a;187.4 转成 壹佰捌拾柒圆肆角整
*/CREATE FUNCTION [dbo].[CNumeric](&#64;num numeric(14,2))returns nvarchar(100)
BEGINDeclare &#64;n_data nvarchar(20),&#64;c_data nvarchar(100),&#64;n_str nvarchar(10),&#64;i intSet &#64;n_data&#61;right(space(14)&#43;cast(cast(abs(&#64;num*100) as bigint) as nvarchar(20)),14)Set &#64;c_data&#61;&#39;&#39;Set &#64;i&#61;1WHILE &#64;i<&#61;14Beginset &#64;n_str&#61;substring(&#64;n_data,&#64;i,1)if &#64;n_str<>&#39;&#39;beginIF not ((SUBSTRING(&#64;n_data,&#64;i,2)&#61; &#39;00&#39;) or((&#64;n_str&#61; &#39;0&#39;) and ((&#64;i&#61;4) or (&#64;i&#61;8) or (&#64;i&#61;12) or (&#64;i&#61;14))))SET &#64;c_data&#61;&#64;c_data&#43;SUBSTRING( N&#39;零壹贰叁肆伍陆柒捌玖&#39;,CAST(&#64;n_str AS int)&#43;1,1)IF not ((&#64;n_str&#61; &#39;0&#39;) and (&#64;i <> 4) and (&#64;i <> 8) and (&#64;i <> 12))SET &#64;c_data&#61;&#64;c_data&#43;SUBSTRING( N&#39;仟佰拾亿仟佰拾万仟佰拾圆角分&#39;,&#64;i,1)IF SUBSTRING(&#64;c_data,LEN(&#64;c_data)-1,2)&#61; N&#39;亿万&#39;SET &#64;c_data&#61;SUBSTRING(&#64;c_data,1,LEN(&#64;c_data)-1)ENDSET &#64;i&#61;&#64;i&#43;1ENDIF &#64;num <0SET &#64;c_data&#61; &#39;&#xff08;负数&#xff09;&#39;&#43;&#64;c_dataIF &#64;num&#61;0SET &#64;c_data&#61; &#39;零圆&#39;IF &#64;n_str&#61; &#39;0&#39;SET &#64;c_data&#61;&#64;c_data&#43; &#39;整&#39;RETURN(&#64;c_data)
END
以上是分享内容&#xff0c;感谢阅读&#xff0c;欢迎收藏、点赞、转发。您的支持是我最大的创作动力&#xff0c;有问题可以留言大家共同进步&#xff01;
IT技术分享社区
个人博客网站&#xff1a;https://programmerblog.xyz
文章推荐程序员效率&#xff1a;画流程图常用的工具程序员效率&#xff1a;整理常用的在线笔记软件远程办公&#xff1a;常用的远程协助软件&#xff0c;你都知道吗&#xff1f;51单片机程序下载、ISP及串口基础知识硬件&#xff1a;断路器、接触器、继电器基础知识