標籤:表變數 googl replace 括弧 dex from div ever values
首先建一張測試表:
create table teststring(name nvarchar(100));insert into teststringvalues(‘張三,李四,王五,馬六,蕭十一,皇宮‘);
1.判斷字串中某字元(字串)出現的次數,第一次出現的位置最後一次出現的位置:
查看’,’出現的次數
select LEN(name)-LEN(REPLACE(name,‘,‘,‘‘)) from teststring;
查看’,’第一次出現的位置:
select CHARINDEX(‘,‘,name) from teststring;
查看’,’最後一次出現的位置:
select len(name)-(CHARINDEX(‘,‘,REVERSE(name))-1) from teststring;
2.取出以’,’分隔開的字元(串),這個例子中就是’張三’、’李四’等
這是有規律的,首先應該想到有沒有特定的系統函數實現,好像沒有,其次就應該想到迴圈了。
當我把’張三’取出後,怎樣把’張三,’去掉呢?
取’張三’不難,
select SUBSTRING(name,1,CHARINDEX(‘,‘,name)-1) from teststring;
如何把’張三,’去掉呢?開始我也不知道,baidu、google啊,關鍵字sql、split吧,總之我也是搜的
select STUFF(name,1,CHARINDEX(‘,‘,name),‘‘) from teststring;
好像用replace也能實現
select REPLACE(name,substring(name,1,CHARINDEX(‘,‘,name)),‘‘) from teststring;
那現在就差迴圈了,我很少寫預存程序或函數的,文法都不記得,用的時候現查(經常用就記得了),我都寫匿名的預存程序,哈哈
create table teststring2(name nvarchar(100));declare @name nvarchar(100);select @name= name from teststring;while(CHARINDEX(‘,‘,@name)<>0)begininsert into teststring2 select SUBSTRING(@name,1,CHARINDEX(‘,‘,@name)-1);set @name=STUFF(@name,1,CHARINDEX(‘,‘,@name),‘‘);set @i=@i+1;endinsert into teststring2select @name
select * from teststring2就可以看到了。
這隻是表中只有一個欄位的,如果多的話,用表變數應該就可以了。
下面例子:
--當產品名稱中包含括弧的時候從產品名稱中截取出括弧內的內容 SELECT product_code ,CASE WHEN CHARINDEX(‘(‘,product_name) != 0 THEN substring(product_name,CHARINDEX(‘(‘,product_name)+1,CHARINDEX(‘)‘,product_name)-CHARINDEX(‘(‘,product_name)-1) end as pcode ,product_name FROM product
SQL Server中判斷字串出現的位置及字串截取