提前谢谢!我在SQL Server 2008 R2中工作。
我想要做的是我有一个文本类型列,它有一个名字和一个名字然后显示^,我想要做的是捕获那个导致^的文本(因此第一个也是最后一个name)并将其附加到同一个表中另一列(不替换)的最底部。
我尝试过使用charindex,但我只是接受了索引编号,我似乎无法在^出现之前捕获文本,我只是得到^的位置而且我很难追加这个 text chunk到同一个表中的另一个文本类型列。为此,我一直在尝试updatetext函数,但它似乎不起作用。我已经废弃了迄今为止我尝试过的东西,因为我已经无所遁形。
总结如下:
我需要在文本数据类型列的开头捕获文本,直到它到达^符号
将该文本保存为某种变量。
将(附加)和少量添加放入另一个文本数据类型列中。
看起来应该很简单,但我遇到了困难,请尽可能提出建议。 谢谢。
答案 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