我有ProductDescription
包含产品名称和 ID 号的字符串数据 ( ),需要提取 ID 号以进行交叉引用...
数据样本:
小部件 (1234) 不同的小部件 (123) 许多小部件 (2x) (4567)
我试图用一个相当混乱的CASE
声明来做到这一点:
CASE
WHEN
ISNUMERIC(
SUBSTRING(
ProductDescription
,CHARINDEX('(',ProductDescription)+1
,CASE
WHEN
CHARINDEX(')',ProductDescription)
-CHARINDEX('(',ProductDescription)-1 > 0
THEN CHARINDEX(')',ProductDescription)
-CHARINDEX('(',ProductDescription)-1
ELSE 0 END
)) = 1
THEN
SUBSTRING(
ProductDescription
,CHARINDEX('(',ProductDescription)+1
,CASE
WHEN
CHARINDEX(')',ProductDescription)
-CHARINDEX('(',ProductDescription)-1 > 0
THEN CHARINDEX(')',ProductDescription)
-CHARINDEX('(',ProductDescription)-1
ELSE 0 END
)
ELSE 0 END
如果产品名称中有括号插入(如“Many Widgets (2x)”示例中),我最终会返回“2x”值,这不是我想要的。
如何仅查找括号中包含的数值并丢弃其他内容?CHARINDEX
有没有一种更简单/更清洁的方法来完成我目前正在尝试的简单工作?
谢谢!
如果您需要的数据总是在字符串的末尾,这样的事情会起作用吗?
我们可以反转字符串,找到第一个打开的括号(实际上是最后一个打开的括号),然后从那里开始。
您可以将字符串转换为 XML 并使用 a
cast as xs:int ?
检查值是否为整数。结果:
第三个字符串的 XML 版本(在 之后
cast(replace)replace
)如下所示:value 函数中的 flwor 遍历
X
节点并返回第一个整数值。