SQL Server中判斷字符串出現的位置及字符串截取


首先建一張測試表:

create table teststring(name nvarchar(100));
insert into teststring
values
('張三,李四,王五,馬六,蕭十一,皇宮');

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)
begin
insert into teststring2 select SUBSTRING(@name,1,CHARINDEX('',@name)-1);
set @name=STUFF(@name,1,CHARINDEX('',@name),'');
set @i=@i+1;
end
insert into teststring2
select @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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM