Показать положительный результат со знаком плюс ( + ) в SQL

У меня есть следующий запрос:

    SELECT 
      CONVERT(DECIMAL(11,1),SUM(Column/1000*-1)) AS NAME,
    FROM
      Table

причина, по которой у меня есть "/1000*-1", заключается в том, что я хотел бы, чтобы результаты отображались в единицах тысяч и инвертировались (отрицательные значения как положительные и наоборот) только с одним десятичным знаком.

Как я могу получить положительные значения со знаком плюс ( + ) перед ними так же, как отрицательные значения имеют знак тире ( -)?

3 ответов


SELECT 
  case 
     when CONVERT(DECIMAL(11,1),SUM(Column/1000*-1)) >= 0 
     then concat('+', CONVERT(DECIMAL(11,1),SUM(Column/1000*-1))) 
     else CONVERT(DECIMAL(11,1),SUM(Column/1000*-1)) 
  end AS NAME
FROM Table

можно использовать точку с запятой многосоставные строки с FORMAT функция (вроде как вы бы с пользовательскими форматами номеров в Microsoft Excel).

формат числа может иметь до три секции кода форматирования, разделенных точка с запятой. Эти разделы определяют формат положительных, отрицательных и нулевых значений в следующем порядке:

<POSITIVE>;<NEGATIVE>;<ZERO>

пример:

FORMAT(@YourValue,'+0.0;-0.0')

(взято из этой)


я обычно тоже скрыть нули при отображении +/- знаки, поэтому я использую строку форматирования:'+0;-0;'''

SELECT FORMAT(+5,'+0;-0;''') --returns: +5
SELECT FORMAT(-5,'+0;-0;''') --returns: -5
SELECT FORMAT(-5,'+0;-0;''') --returns: <empty string>


для отображения нуля, а также вы можете использовать строку форматирования:'+0;-0;0'


применяется для: к TSQL, azure-sql-database, sql-server-2012, sql-server-2014, sql-server-2016


больше Информация:


SELECT 
  REPLACE(CONCAT('+', CONVERT(DECIMAL(11,1),SUM(Column/1000*-1))), '+-', '-')
FROM
  Table

этот подход покажет +0.0, хотя.