用 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 |
+----+---------------------------------------+-----------------+
下面是我用来获取一些信息的 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 |
+----+---------------------------------------+-----------------+