如何在SQL Server中提取Tax字段内的EUR对应浮点金额
SQL Server提取Tax字段中EUR对应金额的实现方案
SQL Server可以通过以下两种方案实现和你Oracle查询相同的效果:
方案1:适用SQL Server 2017及更高版本(支持原生正则函数)
SQL Server 2017及以上版本内置了REGEXP_SUBSTR函数,参数规则和Oracle基本一致,直接替换表名即可使用:
SELECT REGEXP_SUBSTR(Tax, '\d+\W\d+', 1, 2) FROM 你的表名
如果希望匹配逻辑更稳定,避免后续字符串结构变化导致取错第N个匹配项,可以调整正则直接绑定EUR标识,只会命中EUR前的金额数值:
-- 正向预查匹配#EUR前的浮点数,无需指定匹配序号 SELECT REGEXP_SUBSTR(Tax, '\d+\.\d+(?=#EUR)', 1, 1) FROM 你的表名
方案2:适用低版本SQL Server(无原生正则支持)
通过原生字符串截取函数实现,逻辑为定位#EUR的位置后,向前查找最近的#分隔符,截取两者中间的金额内容:
SELECT SUBSTRING( Tax, -- 找到金额前最近的#位置 CHARINDEX('#', Tax, CHARINDEX('#EUR', Tax) - 10) + 1, -- 计算金额长度 CHARINDEX('#EUR', Tax) - CHARINDEX('#', Tax, CHARINDEX('#EUR', Tax) - 10) - 1 ) AS EUR_Amount FROM 你的表名
以上两种方案均可返回你需要的21.36、7.21、5.17目标结果。
内容的提问来源于stack exchange,提问作者Brayn
相关产品推荐
相关产品推荐

