用 RegEX 缩短 Replace 语句?

Shortening Replace statement with RexEX?

下面是我用来获取一些信息的 SQL 查询。此信息中有一个 XML 列。我想阅读此 XML 并在 <> 括号内解析出所需的 ID。下面的查询确实可以做到这一点,但我正在寻找一种更简洁的方法 [如果它存在]:

SELECT 
    tblAT.*, 
    tblA.*,
    tblEM.[Custom] AS fullXML, 
    REPLACE(
        REPLACE(
            CONVERT(
                VARCHAR(MAX), 
                tblEM.[Custom].query('/Ind/ABC')
            )
        , '<ABC>'
        , ''
        )
    ,'</ABC>'
    ,''
    ) AS ABC
FROM 
    ATable AS tblA 
JOIN 
    LLink AS tblL 
        ON tblL.A_AID = tblA.AID 
JOIN 
    AssetsT AS tblAT 
        ON tblAT.AID = tblL.BAID 
JOIN 
    ExternalMetadata AS tblEM 
        ON tblEM.AID = tblA.AID 
WHERE 
    tblAT.ATID = 12 
AND 
    tblA.AID = 30610 
AND 
    tblA.CreatedDate > '2021-05-11 08:58:00'

XML strutor 看起来像这样:

<Ind>
  <ABC>some value here</ABC>
</Ind>

部分:

REPLACE(
    REPLACE(
        CONVERT(
            VARCHAR(MAX), 
            tblEM.[Custom].query('/Individual/ABC')
        )
    , '<ABC>'
    , ''
    )
,'</ABC>'
,''
) AS ABC

是我想要替换的可能是一种更简单的类型,即从 XML 的开头和结尾删除 <>。

我希望能够使用 /<[^>]*>/g 进行一种正则表达式替换,以减少查询长度。

我正在使用 SQL 版本 13.0.5103.6。

那么有什么办法可以清理替换查询区域吗?

不需要任何 RegEx and/or 多次 REPLACE() 调用。

XML XQuery 可以轻松处理日期类型。

看看

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, [Custom] XML);
INSERT INTO @tbl ([Custom]) VALUES
(N'<Ind>
  <ABC>some value here</ABC>
</Ind>');
-- DDL and sample data population, end

SELECT * 
    , [Custom].value('(/Ind/ABC/text())[1]', 'varchar(30)') AS result
FROM @tbl;

输出

+----+---------------------------------------+-----------------+
| ID |                Custom                 |     result      |
+----+---------------------------------------+-----------------+
|  1 | <Ind><ABC>some value here</ABC></Ind> | some value here |
+----+---------------------------------------+-----------------+