2017-09-24 65 views
1

我知道如何在單個表達式中連接多個變量,但是 我試圖從SQL數據庫中重新組裝軟件執行的事件的文本。T-SQL將字段值插入匹配變量值

的關鍵是文本被可變地定位和變量不總是存在的,可以有多達至10

例如我有這樣的字段中出現以下的字段。

  • %1在實體%4上與%2在%3處斷開連接。

然後我去到另一個表中查找該遠程表中的值,並將其投入到不同的領域,並得到如下所示的輸出

  • 字段1:%1已從%2的%斷開3在實體%4上。
  • 字段2 (%1):STATION1
  • 字段3(%2):Server237
  • 字段4(%3):2017年9月23日23時15分00秒
  • 字段5( %4):LSAN237

我想知道該怎麼做是在單個字段中進行組裝,例如下面的文本變化。

  • 「在實體LSAN237的2017-09-23 23:15:00,工作站1已經從Server237斷開連接」。

字段1的文本是高度可變的(超過50k個唯一字符串組合),每個消息中包含最多10個變量。

我不確定它的相關性,但代碼相當長,只是爲了獲得與事件匹配的變量,但它基本上是我用with子句拉動事件日誌,然後選擇日誌部分,然後做一個每個變量的一系列連接和子查詢。只是將原始消息重新彙編到供應商消息以匹配軟件就是挑戰。

我正在使用SQL 2008 R2。

回答

2

你只是想replace()

select replace(replace(replace(replace(field1, '%1', field2 
            ), '%2', field3 
          ), '%3', field4 
        ), '%4', field5 
       ) as with_replacements 
. . . 

當我使用replace()使用通配符,我通常使用[1]而不是%1,因爲格式不能與%10混淆。

+0

希望最後的評論,直接替換空白我的整個輸出,如果參數字段爲空,但如果所有參數都在那裏完全按預期工作。一個參數雖然爲空或空白結果沒有輸出..任何提示解決這個問題? – CRSouser

+1

@CRSouser。 。 。使用'coalesce()'。而不是''%1',field2',使用''%1',coalesce(field2,'')'。當然,你需要確定一個空白是可以接受的,你想要做什麼。 –

+0

感謝這工作得很好! – CRSouser