Изменение форматирования валюты - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующие образцы данных:

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 голосов
/ 29 августа 2018

В качестве другой альтернативы уже опубликованным ответам, вы можете использовать replicate() и sign(), чтобы поставить '-' перед ним, когда число отрицательное. Затем concat() '$' и абсолютное значение (с использованием abs()).

SELECT concat(replicate('-', -sign(moneyvalue)), '$', abs(moneyvalue))
       FROM money;

дб <> скрипка

Имейте в виду, что replicate() возвращает NULL для нулевой или отрицательной длины. В concat() это не проблема, поскольку concat() преобразует нули в пустые строки. Но если вместо этого вы используете оператор конкатенации +, вам придется выполнить это преобразование самостоятельно (используя coalesce() или isnull() и т. Д.).

0 голосов
/ 29 августа 2018

Попробуйте это

DECLARE @money MONEY = -123

SELECT 
    REPLACE(CONCAT('$', @money) ,'$-','-$')
0 голосов
/ 29 августа 2018

Вы действительно должны оставить все форматирование на уровне представления, но если по какой-либо причине вы должны сделать это в SQL, вы можете использовать FORMAT

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

но остерегайтесь делать это на больших наборах, может не работать хорошо .

0 голосов
/ 29 августа 2018

Почему бы просто не использовать replace():

SELECT REPLACE(CONCAT('$', MoneyValue), '$-', '-$')
FROM Money;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...