mssql sql 字串截取實例代碼
關於字串截取我們用substring函數
substring ( expression , start , length ) 返回字元、binary、text 或 image 運算式的一部分。
參數
expression
是字串、二進位字串、text、image、列或包含列的運算式。 不要使用包含彙總函式的運算式。
start
是一個整數,指定子串的開始位置。
length
是一個整數,指定子串的長度(要返回的字元數或位元組數)。
left ( character_expression , integer_expression ) 返回從字串左邊開始指定個數的字元。
參數
character_expression
字元或二進位日期運算式。 character_expression 可以是常量、變數或列。 character_expression 必須是可以隱式地轉換為 Varchar 的資料類型。 否則,請使用 cast 函數顯式轉換 character_expression。
integer_expression
是正整數。 如果 integer_expression 為負,則返回空字串。
返回類型
Varchar
right ( character_expression , integer_expression ) 返回字串中從右邊開始指定個數的 integer_expression 字元。
參數
character_expression
由字元資料組成的運算式。 character_expression 可以是常量、變數,也可以是字元或二進位資料的列。
integer_expression
是起始位置,用正整數表示。 如果 integer_expression 是負數,則返回一個錯誤。
返回類型
Varchar
下面看實例
有一列的值為
title
aaaa,bb,cc
bb,ff,gg
ii
現在想截取成這樣
aaaa bb cc
bb ff gg
ii
也就是分成了3個欄位了
請根據","來取 因為需求可能會是 要第2個逗號之前且第一個逗號之後的內容
所以根據逗號來判別更好!
if object_id('tempdb.. #tb') is not null
drop table #tb
go
create table #tb (title Varchar(50))
go
insert into #tb select 'aaaa,bb,cc'
union all select 'bb,ff,gg'
union all select 'ii'
go
select
title1 = parsename(replace(title,',','.'), len(title) - len(replace(title,',',''))+1),
title2 = parsename(replace(title,',','.'), len(title) - len(replace(title,',',''))),
title3 = parsename(replace(title,',','.'), len(title) - len(replace(title,',',''))-1),
title4 = parsename(replace(title,',','.'), len(title) - len(replace(title,',',''))-2)
from #tb
/*
title1 title2 title3 title4
-------------- -------------- -------------- --------------
aaaa bb cc null
bb ff gg null
ii null null null
(3 行受影響)