【发布时间】:2012-06-05 00:13:25
【问题描述】:
我想做一些我认为使用 T-SQL//SQL Server 2008 R2 相当简单的事情,但我似乎想不出办法。
如果我使用 Java、C#、C++ 等,我会这样做:
- 查找字符串中第一次出现“123”的位置
- 从该位置执行子字符串操作,获取接下来的 50 个字符
所以,在 SQL Server 中,我基本上喜欢:
- 查找列 (X) 包含所述字符串的所有行(基本上是 LIKE 子句)
- 从该列返回从所述字符串位置开始的 50 个字符。
我可以这样做吗? 我可以将一个 XML 列强制转换为 nvarchar(max),进行类似操作,并进行子字符串操作,但我不知道如何获取不过,列中的所述字符串排在首位。
评论中要求的示例内容
CREATE TABLE SampleTable(xmlData xml);
如果 SampleTable 的 xmlData 列如下所示,则假设该值为 1。出于调试目的,我想从有趣的 unicode Þ 字符中提取字符串向前 50 个字符(或者如果小于 50,则到文件末尾)。
<RootNode>
<Row>
<NestedNode1>
some text.
</NestedNode1>
<NestedNode2>
123456
</NestedNode2>
<NestedNode3>
Þ Some crazy name with unicode letters. Þ
</NestedNode3>
</Row>
</RootNode>
【问题讨论】:
-
你能举一个源数据和匹配模式的例子吗?由于这是 XML,因此可能有一些 XML 方法可以比转换为字符串和使用
CHARINDEX/PATINDEX更正确地执行您需要的操作 -
为什么 SUBSTRING(X,CHARINDEX('123',X),50) 不做你想做的事?
-
当然,没问题。我用示例修改了上面的问题。
-
@GilM,也许是这样 - 将其发布为答案,如果 CHARINDEX 有效,我会成为一个快乐的人,你会得到积分 :)
标签: sql-server database tsql sql-server-2008-r2