以下数据库操作针对sql server.

问题来源:由于项目中,有的表字段内容是由多个id或多个其他内容拼接而成.(如:'1,2,3,4,5',或者'name_age_school'),特点是都用某个分隔符储存.

要取得其中的某部分数据内容或者验证某个数据是否在其中.

方案一 是将数据读取到程序中,然后用程序去操作数据,将数据分割为数组,然后进行操作.最好将分割操作放到一个公用的函数库中.

方案二:由于我遇到的问题是将其中的 "name" 替换为 "name_age_shcool"中的名字,这两个名字不一致且以后者中的为准. 因此实际意义并没有多大用途.但是客户需求,如果按照方案一的操作,我又将改动后端实现部分.且接口一要修改.

于是在DB中完成这个字符内容的截取的想法产生了.

解决方式:

USE [StudentDB]
GO
/****** Object: UserDefinedFunction [dbo].[splitSTR] Script Date: 2016/11/24 16:05:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[splitSTR](
@s varchar(5000), --待分拆的字符串
@split varchar(10) --分隔符
)RETURNS @result TABLE(id int ,content varchar(100))
AS
BEGIN
DECLARE @splitlen int
DECLARE @id int
SET @splitlen=LEN(@split+'a')-2
SET @id=1
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @result VALUES(@id,LEFT(@s,CHARINDEX(@split,@s)-1))
SET @id=@id+1
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @result VALUES(@id,@s)
RETURN
END

思路:每遇到一个分隔符,则将前面的字符插入到@result table中,增加id,然后将已插入的字符和分隔符截掉,并且将剩下的字符再次进行查找分隔符,插入@result table 中,增加id, 循环操作.

只到 @s中不包含  @split 分隔符,则说明已经是最后一个字符.所以此时 直接 插入@result table 中 增加id.

结果如图:

变形 取特定位置的某个字符==============================================================================================================

Create FUNCTION [dbo].[splitSTR](
@s varchar(8000), --待分拆的字符串
@split varchar(10), --数据分隔符
@num int --目标数据
)RETURNS varchar(100)
AS
BEGIN
declare @des varchar(100)
DECLARE @splitlen int
declare @position int
set @position=1
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
if @position<>@num
BEGIN
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
set @position=@position+1
END
else
begin
set @s=SUBSTRING(@s,1,CHARINDEX(@split,@s)-1)
set @des=@s
end
set @des=@s
RETURN @des
END

思路:和上面相同,在没有只到相应位置的时候,将分隔符去掉,然后循环此操作.

结果如图

sql 自定义split的更多相关文章

  1. SQL自定义函数split分隔字符串

    SQL自定义函数split分隔字符串 一.F_Split:分割字符串拆分为数据表 Create FUNCTION [dbo].[F_Split] ( @SplitString nvarchar(max ...

  2. MS SQL自定义函数IsPositiveInteger MS SQL自定义函数IsNumeric 水晶报表使用IEnumerable<T>数据源

    MS SQL自定义函数IsPositiveInteger   判断字符串是否为正整数,0开始的的数字不算. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON ...

  3. sql自定义函数及C#中调用

    1.在C#中调用sql自定义函数 1.1 标量值函数 sql语句调用 select  dbo.GetClassIDWithName(1) string strSql = string.Format(& ...

  4. Spark SQL 自定义函数类型

    Spark SQL 自定义函数类型 一.spark读取数据 二.自定义函数结构 三.附上长长的各种pom 一.spark读取数据 前段时间一直在研究GeoMesa下的Spark JTS,Spark J ...

  5. sql server 自定义split 标值函数

    自定义一个函数,分隔一个以分隔符的隔开字符串,例如把'1,3,5,7,9' 变成 数字1 3 5 7 9的结果集. 自定义标值函数: ),)) )) --实现split功能 的函数 as begin ...

  6. SQL模仿Split 功能

    --方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='sele ...

  7. 【SQL】sql版Split函数。用于拆分字符串为单列表格

    功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环 ...

  8. sql 自定义函数--固定格式字符转时间类型

    遇到一个德国的客户,他们的时间格式是JJJJ-TT-DD HH:MM:SS,程序按照这个格式将时间插入数据库,但是在sql自带的转换函数convert.cast过程中报错,网上搜了下都说用conver ...

  9. sql 自定义排序

    方法一: 比如需要对SQL表中的字段NAME进行如下的排序: 张三(Z) 李四(L) 王五(W) 赵六(Z) 按照sql中的默认排序规则,根据字母顺序(a~z)排,结果为:李四  王五 赵六 张三   ...

随机推荐

  1. TCP/IP三次握手与四次握手

    原文地址 http://blog.csdn.net/whuslei/article/details/6667471 http://blog.csdn.net/wo2niliye/article/det ...

  2. Android ListView的优化

    最近的项目中有通讯录这个模块,里面的通讯录涉及的联系人数量很大,导致在加载页面的时候有点卡,所以就必须得进行优化,优化的最终实现理论是什么?就是让ListView一次性加载的数据较少,后续根据用户操作 ...

  3. BZOJ3110:[ZJOI2013]K大数查询——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  4. BZOJ1503:[NOI2004]郁闷的出纳员——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题面复制的洛谷的,因为洛谷好看) 题目描述 OIER公司是一家大型专业化软件公司,有着数以万 ...

  5. [Leetcode] single number 找单个数

    Given an array of integers, every element appears twice except for one. Find that single one. Note:  ...

  6. Linux实验三

    主要参考课本第二章所学习内容  (信息的表示和处理) 所有重点内容: 信息存储 整数表示/运算 浮点数 一   十六进制表示 0~9 A~F 0000~1111 注:(主要参考课本P22) 字 字长: ...

  7. 项目管理---git----快速使用git笔记(三)------coding.net注册和新建项目(远程仓库)

    我们在第一章已经了解了github和coding.net的区别: github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开. codin ...

  8. ubuntu16.04装chrome

    --更简单的方法是先下载chromium浏览器,这是不禁止的,然后打开chromium搜索chrome,chrome的官网下载即可   //安装好后,终端输入google-chrome即可打开 另一种 ...

  9. G. Trace ACM-ICPC 2018 徐州赛区网络预赛 线段树写法

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy  ...

  10. ubuntu server安装kvm

    参考资料: 1. https://help.ubuntu.com/community/KVM 2.http://wiki.ubuntu.org.cn/Kvm%E6%95%99%E7%A8%8B 3.h ...