❶ 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