--sql2000/2005
字串拆分為列表通用函式 if
object_id
('f_getstr')is
notnull
drop
function
f_getstrgo
create
function
f_getstr(@s
nvarchar
(4000),
--待分拆的字串
@flag
nvarchar
(10)=
''--
資料分隔符 )
returns
@rtable
(col
nvarchar
(1000))as
begin if
isnull
(@flag,''
)=''
andlen
(isnull
(@flag,''
)+'a'
)=1
insert
@rselect
substring(@s
,number
+1,1)
from
master
..spt_values
where
type
='p'
andnumber
<
len(@s+
'a')-1
else
insert
@rselect
substring(@s
,number
,charindex
(@flag,@s
+@flag
,number
)-number
)from
master
..spt_values
where
type
='p'
andnumber
<=
len(@s+
'a')
--and substring(@flag+@s,number,1)=@flag --
用此條件或下面的條件均可
andcharindex
(@flag
,@flag+@s
,number
)=number
return
end go
--本例項技巧,利用
master
庫自帶的
spt_values
表,取number
字段作為連續的序號, --
省去建立序號表,盡量做到通用,再加上字串處理函式取得最終結果。
--1.
每個字元拆分取出
select
*from
dbo.
f_getstr(n'
乙個世界乙個家
',null)
select
*from
dbo.
f_getstr(n'
乙個世界乙個家',
'')select
*from
dbo.
f_getstr(n'
乙個世界乙個家',
default)
/* col
------- 一
個 世界 一
個 家(7 行受影響)
*/ --2.
指定分隔符拆分取出
select
*from
dbo.
f_getstr(n'
乙個世界乙個家',
n' ')
select
*from
dbo.
f_getstr(n'
乙個,世界,
乙個,家'
,n',')
select
*from
dbo.
f_getstr(n'
乙個%世界%
乙個%家'
,n'%')
select
*from
dbo.
f_getstr(n'
乙個中國世界中國乙個中國家',
n'中國')
/*col
--------- 乙個
世界 乙個
家 (4 行受影響)
*/
--3.sql2005
以上版本可以結合
進行拆分列值 if
object_id
('tb')is
notnull
drop
table
tbgo
create
tabletb(
idint
,col
varchar
(30))
insert
into
tbvalues
(1,'aa,bb'
)insert
into
tbvalues
(2,'aaa,bbb,ccc')go
selectid,
b.colfrom
tbcross
f_getstr
(col
,',')b
selectid,
b.colfrom
tbouter
f_getstr
(col
,',')b
/* idcol
----------- -----------
1aa1bb
2aaa
2bbb
2ccc
(5 行受影響)
SQL2008 字串函式
1.字串函式 函式 名稱 引數 示例 說明 ascii 字串表示式 select ascii abc 返回 97 返回字串中最左側的字元的ascii 碼。char 整數表示式 select char 100 返回 d 把ascii 碼轉換為字元。介於0 和 255 之間的整數。如果該整數表示式不在此...
字串1 字串的旋轉
題目描述 給定乙個字串,要求將字串前面的若干個字元移到字串的尾部。例如 將字串 abcdef 的前三個字元 a b c 移到字串的尾部,那麼原字串將變成 defabc 首先想到的是將需要移動的字元乙個乙個移到字串的尾部。實現如下 public class transfet s n 1 t publi...
字串(一) 字串Hash
今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...