1

先感谢您!我在 SQL Server 2008 R2 中工作。

我想要做的是我有一个文本类型列,它有一个名字和姓氏,然后显示一个 ^,我想要做的是捕获导致 ^ 的文本(所以本质上是名字和姓氏)和将其附加到同一个表中另一列(而不是替换)的最底部。

我试过使用 charindex 但我只是收到索引号,我似乎无法在 ^ 出现之前捕获文本,我只是得到了 ^ 的位置,而且我很难附加这个文本块到同一个表中的另一个文本类型列。为此,我一直在尝试 updatetext 功能,但它似乎不起作用。到目前为止,我已经放弃了我尝试过的东西,因为我在任何地方都没有错误。

总而言之:

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

将该文本保存到某种变量中。

放置(追加),连同轻微的添加,到另一个文本数据类型列。

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

4

2 回答 2

0

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

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

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

于 2012-10-15T21:48:37.243 回答
0

^首先,让我们找到in的起始位置col1

CHARINDEX('^', col1)

然后,我们将LEFT通过指定要返回的字符数来使用返回列的左侧部分。但是,由于^是在起始位置,我们需要减去 1。

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

然后,我们使用+( CONCATin 2012+) 将另一列 ( 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
于 2012-10-15T22:00:35.560 回答