当前位置: 首页 > 编程日记 > 正文

【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

SQL函数:字符串中提取数字,英文,中文,过滤重复字符 

--提取数字
IF OBJECT_ID('DBO.GET_NUMBER'IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER
GO
CREATE FUNCTION DBO.GET_NUMBER(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S> 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC-12,3ABC')
GO
--123
--
------------------------------------------------------------------
--
提取英文
IF OBJECT_ID('DBO.GET_STR'IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S> 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--
提取中文
IF OBJECT_ID('DBO.CHINA_STR'IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S> 0
SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN @S
END
GO
PRINT DBO.CHINA_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--
过滤重复字符
IF OBJECT_ID('DBO.DISTINCT_STR'IS NOT NULL
DROP FUNCTION DBO.DISTINCT_STR
GO
CREATE FUNCTION DBO.DISTINCT_STR(@S NVARCHAR(100),@SPLIT VARCHAR(50))
RETURNS VARCHAR(100)
AS
BEGIN
IF @S IS NULL RETURN(NULL)
DECLARE @NEW VARCHAR(50),@INDEX INT,@TEMP VARCHAR(50)
IF LEFT(@S,1)<>@SPLIT
SET @S = @SPLIT+@S
IF RIGHT(@S,1)<>@SPLIT
SET @S = @S+@SPLIT
WHILE CHARINDEX(@SPLIT,@S)>0 AND LEN(@S)<>1
BEGIN
SET @INDEX = CHARINDEX(@SPLIT,@S)
SET @TEMP = LEFT(@S,CHARINDEX(@SPLIT,@S,@INDEX+LEN(@SPLIT)))
IF @NEW IS NULL 
SET @NEW = ISNULL(@NEW,'')+@TEMP
ELSE
SET @NEW = ISNULL(@NEW,'')+REPLACE(@TEMP,@SPLIT,'')+@SPLIT
WHILE CHARINDEX(@TEMP,@S)>0
BEGIN
SET @S=STUFF(@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT),CHARINDEX(@SPLIT,@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT))-CHARINDEX(@TEMP,@S),'')
END
END
RETURN RIGHT(LEFT(@NEW,LEN(@NEW)-1),LEN(LEFT(@NEW,LEN(@NEW)-1))-1)
END
GO
PRINT DBO.DISTINCT_STR('A,A,B,C,C,B,C,',',')
--A,B,C
GO
--------------------------------------------------------------------
--
过滤重复字符2
IF OBJECT_ID('DBO.DISTINCT_STR2'IS NOT NULL
DROP FUNCTION DBO.DISTINCT_STR2
GO
CREATE FUNCTION DBO.DISTINCT_STR2(@S varchar(8000))
RETURNS VARCHAR(100)
AS
BEGIN
IF @S IS NULL RETURN(NULL)
DECLARE @NEW VARCHAR(50),@INDEX INT,@TEMP VARCHAR(50)
WHILE LEN(@S)>0
BEGIN
SET @NEW=ISNULL(@NEW,'')+LEFT(@S,1)
SET @S=REPLACE(@S,LEFT(@S,1),'')
END
RETURN @NEW
END
GO
SELECT DBO.DISTINCT_STR2('AABCCD')
--ABCD
GO

--------------------------------------------------------------------
IF OBJECT_ID('DBO.SPLIT_STR'IS NOT NULL
DROP FUNCTION DBO.SPLIT_STR
GO
CREATE FUNCTION DBO.SPLIT_STR(
@S varchar(8000),      --包含多个数据项的字符串
@INDEX int,             --要获取的数据项的位置
@SPLIT varchar(10)     --数据分隔符
)
RETURNS VARCHAR(100)
AS
BEGIN
IF @S IS NULL RETURN(NULL)
DECLARE @SPLITLEN int
SELECT @SPLITLEN=LEN(@SPLIT+'A')-2
WHILE @INDEX>1 AND CHARINDEX(@SPLIT,@S+@SPLIT)>0
SELECT @INDEX=@INDEX-1,@S=STUFF(@S,1,CHARINDEX(@SPLIT,@S+@SPLIT)+@SPLITLEN,'')
RETURN(ISNULL(LEFT(@S,CHARINDEX(@SPLIT,@S+@SPLIT)-1),''))
END
GO
PRINT DBO.SPLIT_STR('AA|BB|CC',2,'|')
--
GO

转载于:https://www.cnblogs.com/northstar/archive/2011/11/16/2251209.html

相关文章:

【java】实现数据在页面之间传输

传数据页面&#xff1a; 方法&#xff1a;使用a标签传输数据 格式&#xff1a; <a name"C03S417" href"getRoomFinal.jsp?roomNumberC03S415">入住 </a> 接收数据页面&#xff1a; 方法&#xff1a; &#xff08;1&#xff09;使用java代…

Android画图学习总结(四)——Animation(上)

随着对Drewable的深入了解&#xff0c;发现了Drawable更加强大的功能&#xff1a;显示Animation。Android SDK介绍了2种Animation&#xff1a; Tween Animation&#xff1a;通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果 Frame Animation&#xff1a;顺序播…

ES6 Rest参数

Rest参数接收函数的多余参数&#xff0c;组成一个数组&#xff0c;放在形参的最后&#xff0c;形式如下&#xff1a; function func(a, b, ...theArgs) { // ... }rest参数只包括那些没有给出名称的参数&#xff0c;注意&#xff0c;rest参数之后不能再有其它参数&#xff08;即…

Data - 深入浅出学统计 - 下篇

本文是已读书籍的内容摘要&#xff0c;少部分有轻微改动&#xff0c;但不影响原文表达。 &#xff1a;以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/2 - 探寻参数 2.1 - 中心极限定理&#xff08;Central Limit The…

[网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.html此处仅供学习记录,版权归原作者. OpenStack 是 Python 2.6 写的&#xff0c;CentOS 5.6 上默认的是 Python 2.4 的环境…

【Linux】Linux computer文件夹下各种文件的作用

1、bin&#xff1a;放可执行文件&#xff0c;一些Linux的命令 注&#xff1a;Linux的命令最终都是一些程序&#xff0c;这些程序都放在bin目录和sbin目录 2、boot : 启动目录 3、dev : 存放设备 注&#xff1a;在Linux中把所有硬件都叫设备 4、etc&#xff1a; 安装软件的各种…

售前十年,两种人生

售前十年&#xff0c;两种人生,多重感悟! 售前第一年&#xff1a; 你 开始会觉得兴奋、紧张、恐慌。你对客户的提问&#xff0c;会有机械性的反应&#xff0c;试着说服他&#xff0c;但客户的表现总让你很茫然&#xff0c;你总是想把自己装扮的像一个专家&#xff0c;甚至故意打…

点击返回上一页面

οnclick"javascript:window.history.back(-1);" 方法一、以按钮点击的方式实现&#xff1a; <input type"button" name"Submit" value"返回上一页" οnclick"javascript:window.history.back(-1);"> 或者 &l…

【Linux】Linux 简单操作指令之磁盘管理

注&#xff1a;有关Linux全面的命令可以到网站&#xff1a;http://linux.51yip.com/查询 1、pwd : 显示当前所在位置 2、ll : 显示当前目录下的内容 注&#xff1a; (1)如果开头为一个 d 则为一个文件夹 如果开头为 - 则是一个文件 (2)ll后可以跟上一个目录&#xff0c;表示显…

浅说——九讲背包之01背包

所谓九讲&#xff0c;也就是&#xff1a;0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包&#xff1a; [问题描述]&#xff08;经典&#xff09;有一个吝啬的地主&#xff0c;不愿…

msvcrt.lib和LIBCD.lib链接冲突

今天在移植一个开源代码到windows的VC6工程&#xff0c;编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…

Oracle 小知识点

-- 表create table test (names varchar2(12),dates date,num int,dou double);-- 视图create or replace view vi_test asselect * from test;-- 同义词create or replace synonym aafor dbusrcard001.aa;-- 存储过程create or replace produce dd(v_id in employee.empoy…

CC2540获取本机MAC地址

//获取自身蓝牙地址void GetOwnAddr(void){ static uint8 ownAddress[6] {0}; ownAddress[5] XREG(0x780E); ownAddress[4] XREG(0x780F); ownAddress[3] XREG(0x7810); ownAddress[2] XREG(0x7811); ownAddress[1] XREG(0x7812); ownAddress[0] XREG(0x7813);}转载于:h…

mysql的小练习

建立如下表&#xff1a; 建表语句&#xff1a; class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engineinnodb default charsetutf8;student表创建语句 create table student(-> sid int not null auto_inc…

针对 Windows Phone 7 上的独立存储的 Sterling

http://msdn.microsoft.com/zh-cn/magazine/hh205658.aspx转载于:https://www.cnblogs.com/thankchunzi/archive/2011/11/18/2254416.html

【Linux】Linux简单操作之文件管理

1、mkdir : 创建文件夹 2、rm &#xff1a; 删除文件或目录 注&#xff1a; 凡是涉及到路径&#xff0c;绝对路径相对路径都可以 &#xff08;1&#xff09;直接使用 rm 文件名可以删除文件&#xff0c;但删除不了文件夹 &#xff08;2&#xff09;删除时会有一行提示 如果…

phpmyadmin另类拿shell

发现了个PHPMYADMIN 结果弱口令登陆进去 爆出绝对路径 然后执行SQL语句发现导出SHELL的时候却发现缺少了import.php这个文件 结果没办法执行MYSQL语句&#xff01; 然后本地测试了下 发现另外的方法phpMyAdmin/sql.php?dbtest&tablea&printview1&sql_queryselect%…

第二章、IP协议详解

一、IP服务的的特点 IP协议是TCP/IP协议族的动力&#xff0c;他为上层协议提供的无状态无连接&#xff0c;不可靠的服务。 无状态是指IP通信双方不同步传输数据的状态信息&#xff0c;因此所有的ip数据报的发送&#xff0c;传出和接受都是相互独立的&#xff0c;没有上下文的联…

为绑定的NSArrayController设置默认的排序

当NSArrayController与一个class或者entity进行绑定&#xff08;Binding&#xff09;之后&#xff0c;可以为这个NSArrayController设置默认的排序。通过在Bindings Insepector中选择Controller Content Parameters -> Sort Descriptor进行默认排序的设定。 1、在.h文件中创…

快速求斯特林数总结(洛谷模板题解)

题目链接 第一类斯特林数行第一类斯特林数列第二类斯特林数行第二类斯特林数列 求一行第一类斯特林数 由第一类斯特林数的推论&#xff0c;\(x^{\overline{n}}\sum_i\begin{bmatrix}n\\i\end{bmatrix}x^i\)&#xff0c;分治FFT计算上升幂即可 \(O(nlog^2n)\)。 求一列第一类斯特…

【Linux】Linux简单操作之系统管理

1、date &#xff1a; 显示系统时间 注 &#xff1a;系统操作与所在的文件夹无关&#xff0c;在哪都能操作。 2、su &#xff1a; 切换账号 注&#xff1a; &#xff08;1&#xff09;如果高级用户切换低级用户可以直接切换&#xff0c;不用密码 &#xff08;2&#xff09;…

嵌入式开发博客收藏

http://hbhuanggang.cublog.cn 嵌入式linux之我行 http://blog.csdn.net/fudan_abc fudan_abc的Linux内核专栏 http://blog.chinaunix.net/space.php?uid20543672

【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建

由于工作需要&#xff0c;接触了大半年时间的Djangoxadmin框架&#xff0c;一直没空对这块对进行相关的梳理。最近在同事的怂恿下&#xff0c;就在这分享下笔者的学习及工作经验吧。 好了&#xff0c;话不多说&#xff0c;下面开始进入正题&#xff1a; 转载请注明出处&#xf…

JavaScript深拷贝Json

今天因为项目需要写了个Json格式的深拷贝&#xff08;深度复制&#xff09;。很简单&#xff0c;没有做其他的判断&#xff0c;代码如下&#xff1a; function deepCopy(json){if(typeof json number || typeof json string || typeof json boolean){return json;}else if(t…

【Linux】Linux简单操作之压缩解压

一、tar &#xff1a; 归档 格式&#xff1a;tar 参数&#xff08;必须有&#xff09; 要被压缩的文件或目录 1、创建归档文件 格式&#xff1a; tar -zvcf 归档文件名 要归档文件列表 注意&#xff1a; &#xff08;1&#xff09;z是压缩 v是显示详细信息 c是创建压缩文件…

Firefox 的User Agent 将移除 CPU 架构信息

Mozilla 计划从 Firefox 的 User Agent&#xff08;用户代理&#xff09;和几个支持的 API 中移除 CPU 架构信息&#xff0c;以减少 Firefox 用户的“数字指纹”。Web 浏览器会自动向用户在应用程序中打开的网站显示信息&#xff0c;而用户代理会显示有关浏览器和浏览器版本、操…

工程师必读 微软如何部署Exchange2010

一年一度的IT技术盛典——微软TechEd2010大会将于2010年12月1日正式开幕。为了更好地为网友和读者报道今年的大会&#xff0c;我们IT168前方的记者在TechEd会场&#xff0c;为读者带来第一时间的报道。 在今天的大会现场&#xff0c;来自微软的高级顾问陈刘项为我们全面介绍了关…

线程范围内的数据共享

1、如果每个线程执行的代码相同&#xff0c;可以使用同一个Runnable对象&#xff0c;这个Runnable对象中有那个共享数据&#xff0c;例如&#xff0c;买票系统就可以这么做。 2、如果每个线程执行的代码不同&#xff0c;这时候需要用不同的Runnable对象&#xff0c;有如下两种方…

Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message

代码 1 <%2 OptionExplicit3 4 DimobjMail5 DimstrSubject6 DimstrBody7 8 strSubject "This is a test email"9 strBody "This test email is using testdevasp.com "&_10 "as the sender email address but we are "&_11 "…

Codeforces Beta Round #95 (Div. 2) 部分解题报告 (dp,组合数,)

做这样的比赛既考快速编码的能力&#xff0c;还有快速思维的能力。本人很弱&#xff0c;跌了rating。。加油&#xff01;&#xff01;&#xff01;。。 第一题上来就把题意理解错了。。粗心啊。。直接模拟着做就行:1&#xff1a;如果字符串全是大写字母就进行大小写转换:2&…