更改货币格式

时间:2018-08-29 12:00:28

标签: sql sql-server tsql

我有以下示例数据:

CREATE TABLE [dbo].[Money](
    [MoneyValue] [money] NOT NULL
)
GO

INSERT [dbo].[Money] ([MoneyValue]) VALUES (99.9900)
INSERT [dbo].[Money] ([MoneyValue]) VALUES (-99.9900)
GO

以下查询:

select 
CONCAT('$', MoneyValue) 
from 
Money

返回以下结果

$99.99
$-99.99

有没有办法我可以返回以下结果?

$99.99
-$99.99

4 个答案:

答案 0 :(得分:4)

您实际上应该将所有格式留给表示层,但是如果出于任何原因 必须在SQL中执行此操作,则可以使用FORMAT

SELECT FORMAT([MoneyValue], '$0.00')
FROM dbo.[Money]

但要注意在大型it may not perform well上执行此操作。

答案 1 :(得分:0)

为什么不只使用replace()

SELECT REPLACE(CONCAT('$', MoneyValue), '$-', '-$')
FROM Money;

答案 2 :(得分:0)

尝试

DECLARE @money MONEY = -123

SELECT 
    REPLACE(CONCAT('$', @money) ,'$-','-$')

答案 3 :(得分:0)

作为已发布答案的另一种选择,当数字为负数时,可以使用V1 V2 MONTH CHOICES PRIORITY WEIGHTS X T1 M1 C1 1 1 X T1 M1 C2 0 0 X T1 M1 C3 0 0 X T2 M1 C1 1 0.5 X T2 M1 C5 0 0 X T2 M1 C6 0 0 X T2 M1 C2 1 0.5 X T1 M2 C1 1 0.5 X T1 M2 C2 0 0.25 X T1 M2 C3 0 0.25 X T2 M2 C1 0 0.16 X T2 M2 C5 1 0.33 X T2 M2 C6 0 0.16 X T2 M2 C2 1 0.33 replicate()在其前面放置一个sign()。然后'-'的{​​{1}}和绝对值(使用concat())。

'$'

db<>fiddle

请注意,abs()返回SELECT concat(replicate('-', -sign(moneyvalue)), '$', abs(moneyvalue)) FROM money; 的长度为零或负数。在replicate()中没有问题,因为NULL将null转换为空字符串。但是,如果改用concat()字符串串联运算符,则必须自己进行转换(使用concat()+等)。