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