如何在SQL或PowerShell中计算含分数上标的价格值
分数价格转可计算数值的SQL与PowerShell解决方案
SQL 解决方案
针对SQL环境,我们可以通过自定义函数替换特殊分数字符为对应小数,生成可计算的表达式,甚至直接计算出结果。以下以SQL Server为例:
自定义转换函数
CREATE FUNCTION dbo.ConvertFractionPrice(@input VARCHAR(50)) RETURNS VARCHAR(50) AS BEGIN -- 替换各类分数字符为对应小数字符串 SET @input = REPLACE(@input, '¼', '.25'); SET @input = REPLACE(@input, '½', '.5'); SET @input = REPLACE(@input, '¾', '.75'); SET @input = REPLACE(@input, '⅛', '.125'); SET @input = REPLACE(@input, '⅜', '.375'); SET @input = REPLACE(@input, '⅝', '.625'); SET @input = REPLACE(@input, '⅞', '.875'); RETURN @input; END;
使用示例
- 生成可计算的表达式字符串
SELECT dbo.ConvertFractionPrice('78-22¼') AS ComputableString; -- 输出结果:78-22.25
- 直接计算数值结果
DECLARE @result DECIMAL(10,3); DECLARE @expr VARCHAR(50) = dbo.ConvertFractionPrice('78-22¼'); EXEC sp_executesql N'SELECT @res = ' + @expr, N'@res DECIMAL(10,3) OUTPUT', @res = @result OUTPUT; SELECT @result AS CalculatedValue; -- 输出结果:55.75
注意:如果是MySQL/PostgreSQL,可替换为REGEXP_REPLACE实现类似逻辑,核心是完成分数到小数的映射替换。
PowerShell 解决方案
PowerShell通过正则替换和表达式执行,可快速完成转换与计算:
自定义转换函数
function Convert-FractionPrice { param( [Parameter(Mandatory=$true)] [string]$InputString ) # 定义分数与对应小数的映射表 $fractionMap = @{ '¼' = '.25' '½' = '.5' '¾' = '.75' '⅛' = '.125' '⅜' = '.375' '⅝' = '.625' '⅞' = '.875' } # 遍历替换所有分数字符 foreach ($fraction in $fractionMap.Keys) { $InputString = $InputString -replace [regex]::Escape($fraction), $fractionMap[$fraction] } # 计算表达式结果 $calculatedValue = Invoke-Expression $InputString # 返回转换后的字符串与计算结果 return [PSCustomObject]@{ ComputableString = $InputString CalculatedValue = $calculatedValue } }
使用示例
# 转换并计算单个价格 Convert-FractionPrice -InputString '78-22¼' Convert-FractionPrice -InputString '78-18⅝' # 批量处理(假设价格列表存在数组中) $priceList = @('78-22¼', '78-18⅝', '100-½') $priceList | ForEach-Object { Convert-FractionPrice -InputString $_ }
执行后会返回包含ComputableString(可计算表达式)和CalculatedValue(最终数值)的对象,例如第一个示例返回:
ComputableString CalculatedValue ---------------- ---------------- 78-22.25 55.75
内容的提问来源于stack exchange,提问作者Himsy
相关产品推荐
相关产品推荐

