❶ sql如何根据隔符分割字符串
数据库自带的substring()、charindex()函数,可以根据需要截取字符串,但并不能实现分割
自己写分割函数,以下可以参考:
createfunctionGetStr
(
@strvarchar(1024),--要分割的字符串
@splitvarchar(10),--分隔符号
@indexint--取第几个元素
)
returnsvarchar(1024)
as
begin
declare@locationint
declare@startint
declare@nextint
declare@seedint
set@str=ltrim(rtrim(@str))
set@start=1
set@next=1
set@seed=len(@split)
set@location=charindex(@split,@str)
while@location<>0and@index>@next
begin
set@start=@location+@seed
set@location=charindex(@split,@str,@start)
set@next=@next+1
end
if@location=0select@location=len(@str)+1
returnsubstring(@str,@start,@location-@start)
end
❷ sql语句进行字符串分割
substr(字符串,截取开始位置,截取长度) //返回截取的字
substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串
substr('Hello World',1,1) //返回结果为 'H' *0和1都是表示截取的开始位置为第一个字符
substr('Hello World',2,4) //返回结果为 'ello'
substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符
❸ sql中怎么把字符串根据逗号拆分
IF(OBJECT_ID('TA') IS NOT NULL) DROP TABLE TA
CREATE TABLE TA(id INT,[value] VARCHAR(100), class VARCHAR(10))
INSERT INTO TA(id,[value],class)
SELECT 1,'3,2,4,5','no' UNION ALL
SELECT 2,'5,1,1+2','yes'
--查询结果
SELECT T.id
,SUBSTRING(T.[value],R.number,CHARINDEX(',',T.[value]+',',R.number)-R.number) AS value
,T.class
,ROW_NUMBER() OVER (PARTITION BY T.id ORDER BY T.id) AS code
FROM TA AS T
JOIN (
SELECT TOP 10 number FROM [master].dbo.spt_values
WHERE [type]='P' ORDER BY number)AS R ON (CHARINDEX(',',','+T.[value],R.number)=R.number)
❹ 在SQL中怎么把一列字符串拆分为多列,请高手赐教
--首先,你是按什么规则拆?我举个例子你要按字段中的逗号拆开,假设字段名叫text
--用charindex和substring这2个函数
selectsubstring(text,1,charindex(',',text)-1)as[before],substring(text,charindex(',',text),len(text))as[after]fromtable
❺ 在SQL Server数据库中拆分字符串函数
SQL Server数据库中拆分字符串函数的具体方法
散察和CREATE FUNCTION uf_StrSplit (@origStr varchar( ) 待拆分的字符串@markStr varchar( )) 拆分标记 如 RETURNS @splittable table( str_id varchar( ) NOT NULL 编号ID string varchar( ) NOT NULL 拆分后的字符串)ASBEGINdeclare @strlen int @postion int @start int @sublen int @TEMPstr varchar( ) @TEMPid intSELECT @strlen=LEN(@origStr) @start= @sublen= @postion= @TEMPstr= @TEMPid= if(RIGHT(@origStr )<>@markStr )没陆beginset @origStr = @origStr + @markStrendWHILE((@postion<=@strlen) and (@postion != ))BEGINIF(CHARINDEX(@markStr @origStr @postion)!= )BEGINSET @sublen=CHARINDEX(@markStr @origStr @postion) @postion;ENDELSEBEGINSET @sublen=@strlen @postion+ ;ENDIF(@postion<=@strlen)BEGINSET @TEMPid=@TEMPid+ ;SET @TEMPstr=SUBSTRING(@origStr @postion @sublen);INSERT INTO @splittable(str_id string)values(@TEMPid @TEMPstr)IF(CHARINDEX(@markStr @origStr @postion)!= )BEGINSET @postion=CHARINDEX(@markStr @origStr @postion)+ ENDELSEBEGIN冲盯SET @postion=@postion+ ENDENDENDRETURNEND
例如 select * from uf_StrSplit( )
输出结果
lishixin/Article/program/SQLServer/201311/22421
❻ sql 拆分字符串
alter FUNCTION [dbo].[SpitString]
(
@string nvarchar(500),--被分的字符串
@sp nvarchar(100) --分隔符
)
RETURNS
@_strings TABLE
(
id int,
string nvarchar(64),
inx int,
str1 nvarchar(65)
)
AS
BEGIN
declare @count int --计数
set @count=0
declare @index int
declare @one nvarchar(64)--取下来的一节
set @index=Charindex(@sp,@string)
while(@index>0)
begin
set @one=left(@string,@index-1)
set @count=@count+1
insert into @_strings (id,string,inx,str1) values(@count,@one,@index,@string)
set @string=right(@string,len(@string)-@index)
set @index=Charindex(@sp,@string)
end
insert into @_strings (id,string,inx,str1) values(@count+1,@string,@index,@one)
RETURN
END
go
调用:
SELECT * FROM [dbo].[SpitString] ('asdads,ad,sadsa,d,w,dsa,dsa,d,sad,sa,' ,',')
请注意:为了调试方便,便于理解森旦,返回的表中多芦春核加入了两个字段,这样,字串分解过程一目了然,您可以表值参数及插入语句中将其去掉。
SQL SERVER调试方法:1.在查询分析器中进行调试,可以查看执行结果,错误报告,错误行定位等,还可以进行效率分析。也可以加入一些调试中间结果或字段(如本例)进行调试。
2.跟踪指令陪掘执行进行调试:参过事件探查器,打开,文件,新建,跟踪,选择服务器及登录参数,选择一个模板,点击运行,即可开始跟踪SQLSERVER相关动作
❼ sql语句如何将一个字符串拆分重组
您好,您可以参考下面的程序:
declare @str varchar(20)
set @str = 'abcdefg'
declare @i int
declare @count int
select @count = 0
select @i = len(@str)
declare @str1 varchar(20)
select @str1 = ''
while (@i > @count)
begin
select @count = @count + 1
select @str1 = @str1 + substring (@str,@count,1) + '.'
end
print @str1
这个字符串,你可以从表字段中获取,也或者可以直接赋值,最好@str1就是你想要的输出。
❽ SQL字符串拆分的问题
1.先建一个自定义函数,将 abcd 变成 a,b,c,d
create function dbo.[fn_split2]
( @string varchar(100) )
returns varchar(200)
as
begin
declare @i int;
declare @ret varchar(200);
set @ret = '';
set @i = 1;
while @i <= len(@string)
begin
set @ret = @ret + substring(@string,@i,1) + ',';
set @i = @i + 1;
end;
set @ret = substring(@ret,1,len(@ret)-1);
RETURN @ret;
end;
2.再插入A表时使用自定义函数,如
insert into A (lastid) select dbo.fn_split2(blastid) from B;
有问题可以Q我 53650299
❾ sql如何截取字符
sql截取字符串:
1、LOCATE(substr, str):返尺孙回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;
2、POSITION(substr IN str):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;
3、LEFT(str, length):从左边开始截取str,length是截取的长度;
4、RIGHT(str,length):从衫戚右边开始截取str,length是截取的长度;
5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出现位置之前的字符串;
6、SUBSTRING(str,n ,m):返回字符串str从第n个字符截取到第m个或困陵字符;
7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;
8、LENGTH(str):计算字符串str的长度。
❿ sql查询里 怎么拆分字符串(按“/”拆分)
先建立一个自定义函数,之个函数非常有用,建议收入自已的数据库
CREATE FUNCTION mysplit--将以某分隔符分段的字串,按指定的顺序号提取子串:
(@strnvarchar(2000),--源字串
@snint,--提取序号
@Delivarchar(1)--分隔符
)
RETURNSvarchar(100)
AS
BEGIN
declare@firstint,@lastint,@resultvarchar(1000),@sn0int
select@sn0=0,@first=0,@LAST=1,@str=@str+REPLICATE(@DELI,1)
while@sn0!=@sn
begin
select@sn0=@sn0+1,@first=@LAST,@last=charindex(@DELI,@str,@LAST)+1
end
if@last-@first-1<0
set@result=''
else
SET@RESULT=SUBSTRING(@str,@FIRST,@LAST-@FIRST-1)
RETURN(@RESULT)
END
查询方法:
DECLARE@AVARCHAR(100),@BVARCHAR(100),@CVARCHAR(100)
SELECT
@A=DBO.MYSPLIT('A|B|C',1,'|'),
@B=DBO.MYSPLIT('A|B|C',2,'|'),
@C=DBO.MYSPLIT('A|B|C',3,'|')
SELECT@A,@B,@C