2012-10-15 81 views
1

預先感謝您!我正在SQL Server 2008 R2中工作。Charindex更新聲明問題

我想要做的是我有一個文本類型列,有一個名字,然後顯示一個^,我想要做的就是捕獲文本導致^(如此的基本上第一個和姓氏)​​並將其附加到同一個表內另一列的最底部(而不是替換)。

我試過使用charindex,但我只是接受索引號,我似乎無法得到它在^出現之前捕獲文本,我只是得到了^的位置,而且我也很難過將這個 文本塊附加到同一個表內的另一個文本類型列中。爲此,我一直在嘗試updatetext函數,但它似乎不工作。到目前爲止,我已經報廢了我所嘗試過的,因爲我在任何地方都沒有錯誤。

因此,在總結:

我需要在文本數據類型列的開始捕獲文本,直到它到達一個^符號

保存的文本,以某種變量。

將(追加)和輕微添加放置到另一個文本數據類型列中。

它似乎應該很簡單,但我有困難的時候,請儘可能提出建議。 謝謝。

回答

0

首先,讓我們找到的起始位置^col1

CHARINDEX('^', col1) 

然後,我們將使用LEFT通過指定要返回的字符數返回列的左側部分。但是,由於^處於起始位置,我們需要減去1。

LEFT(col1, CHARINDEX('^', col1) - 1) 

然後,使用+(在2012+ CONCAT)來連接另一列(col2)本:

col2 + LEFT(col1, CHARINDEX('^', col1) - 1) 

如果您需要進行其它添加,可以將字符串值使用單獨的加:

'Hello' + ' ' + 'World' 

最後的語句可能看起來像:

SELECT col2 + LEFT(col1, CHARINDEX('^', col1) - 1) AS col 

更新

如果有沒有^一些值,你將需要一個CASE語句來避免接收錯誤「傳遞給左或子字符串函數無效長度參數」:

SELECT 
    CASE 
    WHEN CHARINDEX('^', col1) > 0 
     THEN LEFT(col1, CHARINDEX('^', col1) - 1) 
    ELSE col1 
    END AS col 
+0

2012年之前的SQL Server不知道CONCAT。只需使用+來代替:col2 + LEFT(col1,CHARINDEX('^',col1) - 1) –

+0

@SebastianMeine謝謝你的指出! – Kermit

+0

我得到「無效的長度參數傳遞給左或SUBSTRING函數。」使用 – user1748346

0

CharIndex爲您提供了您要查找的字符的數字位置。您需要在另一個函數(如LEFT或RIGHT)中使用它來獲取所需的子字符串。這是你如何將一個^字符之前獲取一個字段的第一部分:

SELECT LEFT(SomeField, CharIndex('^', SomeField) - 1) 

(你減去一個排除從^你的子。)