提取数字、英文、中文、过滤重复字符等SQL函数(含判断字段是否有中文)

本文主要是介绍提取数字、英文、中文、过滤重复字符等SQL函数(含判断字段是否有中文),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在日常应用中,往往根据实际需求录入一些值,而这些值不能直接使用,所以Sql中经常会对字段值进行一些常规的处理。这里搜集了(提取数字、英文、中文、过滤重复字符、分割字符的方法),方便日后查询使用。   

一、判断字段值是否有中文

复制代码
--SQL 判断字段值是否有中文
create  function  fun_getCN(@str  nvarchar(4000))    
returns  nvarchar(4000)    as    begin    declare  @word  nchar(1),@CN  nvarchar(4000)    set  @CN=''    while  len(@str)>0    begin    set  @word=left(@str,1)    if unicode(@word)  between  19968  and  19968+20901  set  @CN=@CN+@wordset  @str=right(@str,len(@str)-1)    end    return  @CN    end    
select dbo.fun_getCN('ASDKG论坛KDL')
--论坛
select dbo.fun_getCN('ASDKG論壇KDL')
--論壇
select dbo.fun_getCN('ASDKDL')
--
复制代码

二、提取数字

复制代码
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@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('呵呵ABC123ABC')
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

这篇关于提取数字、英文、中文、过滤重复字符等SQL函数(含判断字段是否有中文)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967752

相关文章

get请求中url传参中文乱码问题--集锦

================================================= 分享一个好友的人工智能教程。零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助!点击查看教程 =================================================      在项目中经常会遇到中文传参数,在后台接收到乱码问题。那么在遇到这种情况下我们应该怎么

Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据

表单提交时候我们应该控制提交按钮,不能点击多次进行数据的重复提交。要不然就会有冗余的重复的数据在系统中,造成系统出现数据垃圾。jQuery很简单的就可以实现对表单提交按钮控制,下面就是相关的例子和代码。 <form action="${pageContext.servletContext.contextPath}/XXX/###" method="post" id="messag

Mysql—运行sql的小技巧

本篇集中整理一下执行sql的小技巧,这种方式不仅带来了操作上的便捷,也可以保证数据可以数据的安全性。 1:查询数据(保证查询性能) 首先想先解释一下 SELECT * 和 SELECT t.id , t.name 的性能,结论:后者性能其实总体优于前者,不信可以自己去试验。 在查询的时候最好给表起个 别名,方便找到表中要查询的字段。执行sql的进行多条件查询的时候,使用类如Navicat

mysql学习—查询数据库中特定的值对应的表

遇到一个问题,我将问题抽象简单描述如下: 循环查询数据库所有表,查出字段中包含tes值的表,并且将test修改为hello? 因为自己不才找了很久也没有找到很好的方法,又对mysql的游标等用法不是很了解,在时间有限的情况下,发现了下面的方法,分享给大家: 1:查找 (1)使用工具 我使用的mysql的Navicat for MySQL的工具 (2)使用sql的语法 这个方式暂时

MySQL字段存储的内容是不区分大小写的,你知道吗?

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 文章目录 00 简单回顾01 一个例子02 解决方案03 总结04 参考资料 00 简单回顾 之前写过一篇关于mysql 对表大小写敏感的问题,其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。 想回顾一下: MySQL在Linux下数据库名、表名、列名、别名大小写规则

MySQL存储的字段是不区分大小写的,你知道吗?

点击上方Java编程技术乐园,轻松关注! 及时获取有趣有料的技术文章 做一个积极的人编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 00 简单回顾 之前写过一篇关于mysql 对表大小写敏感的问题(你有遇到过MySQL因大小写敏感导致的问题吗),其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。 想回顾一下: MySQL在Linux下数据库名、表名、列名、别名大

一个因MySQL大小写敏感导致的问题

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 文章目录 00 MYSQL对大小写敏感01 一个表字母大小故事lower_case_file_systemlower_case_table_names 02 注意事项03 总结04 参考资料 00 MYSQL对大小写敏感 见字如面,见标题知内容。你有遇到过因为MYSQL对大小写敏感而被坑的体验

MySQL 的COUNT(x)性能怎么样?

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 文章目录 0 说明1 总结2 拓展 x 可以代表: 主键id、字段、1、* 0 说明 对于count(主键id)来说 innodb引擎会遍历整张表,把每一行的id值都取出来,返回给server层,server层判断id值不为空,就按行累加 对于count(字段)来说 如果这个字段

MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?

大家好,我是阿飞云 怕什么真理无穷,进一步有近一步的欢喜 记录一个MySQL查询排序的问题,一个SQL语句没有加order by,那么查询出来的结果到底是按照什么规则排序的呢?查询了网上的一些资料,分享如下: •MyISAM 表 MySQL Select 默认排序是按照物理存储顺序显示的(不进行额外排序)。也就是说SELECT * FROM tbl – 会产生“表扫描”。如果表没有删除、替换、更

Linux内核驱动学习(三)字符型设备驱动之初体验

Linux字符型设备驱动之初体验 文章目录 Linux字符型设备驱动之初体验前言框架字符型设备程序实现cdevkobjownerfile_operationsdev_t 设备注册过程申请设备号注册设备register_device 如何构建模块编译内核编译MakefileKconfig 总结参考 前言 驱动总共分为字符型设备驱动,块设备驱动,网络设备驱动。对于字符型设备驱