Функция SQL Server Format () - PullRequest
       8

Функция SQL Server Format ()

1 голос
/ 16 августа 2011

У меня есть текущий запрос в базе данных MS Access, которая использует функцию Format () для преобразования числа (длинного целого) в строку.

Таблица была переработана и перенесена на сервер SQL. Поле, которое мне нужно преобразовать, не является денежным полем, которое мне нужно отбрасывать все после периода и преобразовывать его в строку с определенным количеством символов.

Пример данных:

Amount
228.00000
1896.00000
6411.00000
317.00000
4830.00000
898.00000
1778.00000
1308.00000
45139.00000
424.00000

Текущий запрос MS Access:

SELECT Format(CallAmt],"000000000000000") AS Amount
FROM Fed

Новый запрос:

SELECT Convert(varchar(15), FedAmount)
FROM Fed.SM_T_Call

Я бы хотел, чтобы мой конечный продукт выглядел так:

Amount
000000000000228
000000000001896
000000000006411
000000000000317
000000000004830
000000000000898
000000000001778
000000000001308
000000000045139
000000000000424

Я не знаю, как отбросить все после периода и добавить дополнительные нули к моему результату. Кто-нибудь может предложить какую-либо помощь?

Ответы [ 5 ]

6 голосов
/ 16 августа 2011

Вы можете использовать:

  • CAST к десятичному числу, чтобы иметь фиксированное количество знаков после запятой
  • Используйте STR для правого выравнивания
  • Используйте RIGHT('000000000000000' + CAST(MyNumber AS varchar(15)), 15), чтобы иметь ведущие нули

Или все вышеперечисленное: но мы не знаем, какой вывод вы хотите ...

Редактировать, после обновления

RIGHT('000000000000000' + CAST(CAST(Amount AS int) AS varchar(15)), 15)

Правка, октябрь 2011

SQL Server 2012 (Denali) будет иметь функцию Format.

Редактировать, после комментария от onedaywhen

DECLARE @len tinyint;
SET @len = 15;
RIGHT(REPLICATE('0', @len) + CAST(CAST(Amount AS int) AS varchar(255)), @len)
0 голосов
/ 24 октября 2011

@ gbn'd answer - хороший вариант для SQL Server, в котором используются проприетарные функции RIGHT() и REPLICATE().

. Если вы уже портировали один раз, может быть следующееболее портативная версия, поскольку она использует стандартные функции SQL.Обратите внимание, что оператором конкатенации строк в стандартном SQL является ||, в то время как SQL Server использует + для того же (и MS по-прежнему утверждает, что он совместим, см. Рисунок).Тем не менее, предлагаемый код по-прежнему высоко оценивается по шкале переносимости, потому что преобразование `|| в + тривиально:

REVERSE(CAST(REVERSE(CAST(CAST(Amount AS INTEGER) AS VARCHAR(15))) 
   + '000000000000000' AS CHAR(15)))
0 голосов
/ 16 августа 2011
SELECT CAST(CAST(FLOOR(FedAmont) AS INT) AS VARCHAR(40)) + '.00'
0 голосов
/ 16 августа 2011

Вы можете использовать десятичный тип данных:

declare @var decimal(15,6)
set @var = 228564.12345678

И затем, если вы хотите, чтобы после этого он был varchar:

select convert(varchar(15),@var)

Или в выборе, он может выглядетькак это:

select 
   [field1] as OldValue,
   convert(decimal(15,6),[field1]) as NewValue
from 
   myTable
0 голосов
/ 16 августа 2011
select Cast(Cast(fedamount as int), as varchar(15))
from Fed.SM_T_Call

Может на самом деле работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...