Charindex更新声明问题

时间:2012-10-15 21:42:38

标签: sql tsql indexing sql-update insert-update

提前谢谢!我在SQL Server 2008 R2中工作。

我想要做的是我有一个文本类型列,它有一个名字和一个名字然后显示^,我想要做的是捕获那个导致^的文本(因此第一个也是最后一个name)并将其附加到同一个表中另一列(不替换)的最底部。

我尝试过使用charindex,但我只是接受了索引编号,我似乎无法在^出现之前捕获文本,我只是得到^的位置而且我很难追加这个 text chunk到同一个表中的另一个文本类型列。为此,我一直在尝试updatetext函数,但它似乎不起作用。我已经废弃了迄今为止我尝试过的东西,因为我已经无所遁形。

总结如下:

我需要在文本数据类型列的开头捕获文本,直到它到达^符号

将该文本保存为某种变量。

将(附加)和少量添加放入另一个文本数据类型列中。

看起来应该很简单,但我遇到了困难,请尽可能提出建议。 谢谢。

2 个答案:

答案 0 :(得分:0)

CharIndex为您提供所寻找角色的数字位置。您需要在另一个函数(如LEFT或RIGHT)中使用它来获取所需的子字符串。这就是你在^字符之前得到字段的第一部分的方法:

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

(您减去一个以从子字符串中排除^。)

答案 1 :(得分: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语句以防止接收“传递给LEFT或SUBSTRING函数的无效长度参数”错误:

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