SQL Server中等效Oracle TO_CHAR格式'FM099999999V99MI'的实现咨询
原Oracle格式逻辑拆解
你用到的TO_CHAR(Amount, 'FM099999999V99MI')逻辑如下:
FM:移除输出首尾空格099999999:整数部分固定9位,不足补前导零V99:隐式将数值乘以100,把两位小数直接拼在整数部分后MI:负数的负号放在输出末尾,正数不显示符号
SQL Server等效实现
方案1:FORMAT函数写法(适配SQL Server 2012及以上版本)
写法最简洁,完全匹配输出规则:
SELECT Amount, CONCAT( FORMAT(ABS(ROUND(Amount * 100, 0)), '00000000000'), CASE WHEN Amount < 0 THEN '-' ELSE '' END ) AS Converted FROM Billing_table
方案2:低版本兼容写法(适配SQL Server 2008及更早版本)
如果数据库不支持FORMAT函数,可以用传统字符串函数实现:
SELECT Amount, CONCAT( RIGHT(REPLICATE('0', 11) + CAST(CAST(ABS(ROUND(Amount * 100, 0)) AS BIGINT) AS VARCHAR(11)), 11), CASE WHEN Amount < 0 THEN '-' ELSE '' END ) AS Converted FROM Billing_table
两种写法都完全匹配你给出的示例输出规则。
内容的提问来源于stack exchange,提问作者Sampath
相关产品推荐
相关产品推荐

