热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库:分享四个实用的SQLServer脚本函数,欢迎收藏

1、字符串指定字符分割为list功能:主要适用于数据库字段存储字段用逗号等分隔符存储,可以转换为list然后用子查询使用。--字符串指定字符分割为lis

 

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;断路器、接触器、继电器基础知识



推荐阅读
  • 如何实现Percona Mysql Galera多读写集群的部署
    本篇文章给大家主要讲的是关于如何实现PerconaMysqlGalera多读写集群的部署的内容,感兴趣的话就一起来看看这篇文章吧,相信看完如何实现PerconaMysq ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • mysql  GROUP_CONCAT获取分组的前几名
    如果是oracle应该很容易用Partition By实现。比如说要获取班级的前3名,就可以用GROUP_CONCAT+ GROUPBY + substring_index实现。考 ... [详细]
  • Birthdate ... [详细]
  • 让日期区间更友好!把常见的日期格式如:YYYY-MM-DD转换成一种更易读的格式。易读格式应该是用月份名称代替月份数字,用序数词代替数字来 ... [详细]
  • 《How Tomcat Works》读书笔记(四)Tomcat Default Connector
    为什么80%的码农都做不了架构师?上节《HowTomcatWorks》读书笔记(三),只是讲了一个简单的connect ... [详细]
  • 下载器,就是一种网络工具,从网络中接收自己想要的数据。下载器是一个网络客户端。它的下载流程无非就是客户端连接服务器端,然后发送资源下载请求 ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • 接上文http:blog.itpub.net29254281viewspace-1318239领导让开发同学鼓捣一个可配置化的后台.又回到了原来的问题如果要灵活,很多参数要 ... [详细]
  • 【Modbus 】Modbus 协议
    Modbus协议简介Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422 ... [详细]
  • socket8 [命名管道]
    ::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一 ... [详细]
  • CentOS 7.6网卡绑定mode1
    CentOS7.6网卡绑定mode1[root@server~]#systemctlstopNetworkManager[root@server~]#systemctldisabl ... [详细]
  • 这两天做了一个小项目,里面有个下载进度的进度条需要制作。先看呈现的效果:点击进度,然后依次递增,直到递增到百分之百。现在把这部分代码分享下来。<!DOCTYPEhtml><html ... [详细]
  • SpringBoot 整合 ShardingJDBC(mysql8.0)(简单入门含gitee源码)
    SpringBoot整合Sharding-JDBC(mysql-8.0)感谢​我也是从网上的资源查找后进行学习的,所以该项目仅适用与个人学习,不建议使用于生产项目。​这里感谢如下: ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
author-avatar
suyewen525_337
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有