【发布时间】:2020-08-25 23:18:31
【问题描述】:
有什么方法可以在 SQL Server 的 XQuery 路径中使用正则表达式中的“备用组”?
我有这个问题...
SELECT Q.ROWID QUEUEID, Q.DOCUMENTPACKAGETYPE,
B.R.value('@_ID', 'NAME') PARTYID,
B.R.value('@_BorrowerID', 'NAME') BORROWERID,
B.R.value('@_Name', 'NAME') NAME,
B.R.value('@_EmailAddress', 'NAME') EMAILADDRESS
FROM docutech.QUEUE_EX Q
CROSS APPLY Q.DATA.nodes('LOAN_PUSHBACK_PACKAGE/EVENT_DATA/ESIGN/PARTY') AS B(R)
WHERE Q.REASONFORPUSHBACK = 'DocumentDistribution' AND B.R.value('@_Type', 'NAME') = 'Borrower'
但我需要的是,对于CROSS APPLY,路径中的 ESIGN 节点实际上可以是 ESIGN 或 ECLOSE。因此,我希望执行以下操作(以 RegEx 术语思考)...
CROSS APPLY Q.DATA.nodes('LOAN_PUSHBACK_PACKAGE/EVENT_DATA/(ESIGN)|(ECLOSE)/PARTY') AS B(R)
有没有办法做这样的事情?我真的不想为了这个简单的区别而不得不重复两次相同的查询,尽管XQuery 可能不支持这样的选项?
实际上,我刚刚发现我可以使用星号,这将匹配两者,但如果可能的话,我希望能够将其限制为那些已知的节点值。如果没有,我想就可以了。
【问题讨论】:
-
如果您能提供一个最小的可重现示例,那就太好了:(1) DDL 和样本数据填充,即 CREATE 表加上 INSERT、T-SQL 语句。 (2) 你需要做什么,即逻辑,以及你在 T-SQL 中尝试实现它。 (3) 基于上述#1 中的样本数据的期望输出。 (4) 你的 SQL Server 版本 (SELECT @@version;)
标签: sql-server xml xquery