0

我想做一些我认为使用 T-SQL//SQL Server 2008 R2 相当简单的事情,但我似乎想不出办法。

如果我使用 Java、C#、C++ 等语言,我会这样做:

  1. 查找字符串中第一次出现“123”的位置
  2. 从该位置执行子字符串操作,获取接下来的 50 个字符

所以,在 SQL Server 中,我基本上喜欢:

  1. 查找列 (X) 包含所述字符串的所有行(基本上是 LIKE 子句)
  2. 从所述字符串的位置开始从该列返回 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>

4

1 回答 1

2

您在寻找 CHARINDEX 吗?

;WITH CTE AS(
    SELECT CAST (xmlData as nvarchar(max)) as X
    FROM SampleTable
)
SELECT SUBSTRING(X,CHARINDEX(N'Þ',X),50) as [String]
FROM CTE
WHERE CHARINDEX(N'Þ',X)>0
于 2012-05-30T18:15:10.480 回答