2012-10-15 63 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) 

(你减去一个排除从^你的子。)