簡體   English   中英

一個Sql Query來搜索和替換特定的前綴字符串?

[英]A Sql Query to search and replace specific prefixed strings?

好吧,我有這樣的事情(我搞砸了......) -

Id Name                     City
1  XXX - New                Plano
2  XXX - XXX - New1         Dallas
3  XXX - XXX - XXX - New2   Sacramento
4  XXX - New3               Houston
5  XXX - XXX - New4         Austin

所以,我想用更多的一個XXX前綴替換所有的出現只有1.例如id 2應該有Name = XXX - New2 如何實現這一目標? 即使是基本上檢查前綴並用名稱替換它的查詢也會起作用我認為然后我可以再次添加前綴? 我的意思是設置所有記錄只是說NewNew2 ..so ...然后我可以添加XXX前綴嗎?

您可以使用字符串替換功能刪除“XXX - ”的所有實例。

UPDATE tableName
SET Name = Replace(Name, 'XXX - ', '')

或者,要保留單個實例,您可以使用:

UPDATE tableName
SET Name = 'XXX - ' + Replace(Name, 'XXX - ', '')
WHERE CHARINDEX('XXX - ', Name) > 0

您想要去掉字符串“ XXX - ”的出現次數2到n。 這假設最終的數據需要保留:

SELECT 'Starting' --also sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
    UPDATE
       Bollixedtable
    SET
       name = STUFF (name, 7, 6, '')
    WHERE
       SUBSTRING (name, 7, 6) = 'XXX - '

否則,這將刪除XXX並重置您的數據,基於XXX - New(id-1)模式,如果您想重新開始,則不使用過濾器

    UPDATE
       Bollixedtable
    SET
       name = 'XXX - New' + CAST(id-1 AS varchar)

編輯:為清晰起見而更新

Update Table
Set Name = Replace(
                Replace(
                    Replace( Name, ' - XXX - ', ' - ')
                    , ' - XXX - ', ' - ')
                , ' - XXX - ', ' - ')

此解決方案應處理大多數變體。 例如,它將處理所有出路:

XXX - XXX - XXX - XXX - XXX - XXX - XXX - XXX - New2

如果您需要進一步處理它,您只需添加另一個替換呼叫。

取決於數據及其統一程度。 如果您的所有數據都屬於您問題中的格式,那么最簡單的就是:

SELECT
    ID,
    'XXX - ' + SUBSTRING(NAME, CHARINDEX('NEW',NAME),LEN(Name)-CHARINDEX('NEW',NAME)) AS Name,
    CITY
FROM
    FOO

否則,它可能會變得更復雜。 告訴我們更多關於您的數據的統一性以及您將遇到的格式,即您可能有XXXX - XXXX - XXXX - XXXX - ad infintum

假設您只想在最后一個“ - ”之前刪除所有部分的字符串,然后再次添加前綴,您可以使用:

UPDATE tblWhatever
SET Name = 'NewPrefix - ' + RIGHT(Name, CHARINDEX(' - ',REVERSE(Name))-1)

這基本上是搜索最后一次出現的“ - ”然后使用right()函數來獲取字符串的最后一部分。 然后它將前綴附加到該上。

這基本上就是您在問題的最后部分所描述的內容。

update myTable 
set name = rtrim(ltrim(replace(name, 'XXX - XXX', 'XXX - '))) 

update myTable 
set name = rtrim(ltrim(substring(name, charindex(name, '-'), len(name)))) 
where name like '%-%' 
declare @loop bit
set @loop = 1

while @loop
begin
  update table
  set name = right(name,len(name)-6)
  where left(name,12) = 'xxx - xxx - '

  set @loop = @@rowcount
end

暫無
暫無

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

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