簡體   English   中英

字符串中的SQL子字符串

[英]SQL substring from a string

我有一個表XYZ,其列FileName的值如下:

CCA_Type-PROPOSAL_Id-45845_Test1.txt
CPA_Type-PROPOSAL_Id-490845_Test2.txt

我想更新此列,使其僅包含文件名,並刪除前面的其他字符:

Test1.txt
Test2.txt

因此,我寫了以下內容:

Update XYZ
set FileName = (select RIGHT(FileName,CHARINDEX('_',REVERSE(FileName),0)-1))

但是,如果FileName的值類似於:

  CCA_Type-PROPOSAL_Id-45845_Test_RR1.txt

我的腳本返回RR1.txt而不是Test_RR1.txt! 它找到最后一個下划線並從那里返回子字符串。 如何更改它,以便得到第三個下划線並在其后返回一個子字符串!

charindex可以選擇起始位置。 您可以將多個鏈接在一起:

select right(FileName, len(FileName) - 
   charindex('_', FileName, 
      charindex('_', FileName, 
         charindex('_', FileName) 
      + 1) 
   + 1))

因此,您要輸入“之后的第一個下划線((第一個下划線之后的第一個下划線))”-即第三個下划線。

這樣的事情應該工作:

declare @table table ( 
  [file_name] [sysname] 
  ); 
declare @pattern [sysname]= N'_test'; 
insert into @table 
            ([file_name]) 
values      (N'CCA_Type-PROPOSAL_Id-45845_Test1.txt'), 
            (N'CPA_Type-PROPOSAL_Id-490845_Test2.txt'), 
            (N'CCA_Type-PROPOSAL_Id-45845_Test_RR1.txt'); 
select [file_name]                                                                         as [file_name] 
       , charindex(@pattern, lower([file_name]))                                           as [character_index_of_pattern]
       , substring([file_name], charindex(@pattern, lower([file_name])), len([file_name])) as [desired_output] 
from   @table; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM