Небольшая справка, необходимая в _Sql преобразовании десятичной_ с использованием ** CASE ** - PullRequest
1 голос
/ 07 марта 2011

Мне нужно преобразовать значение в десятичное число. Перед этим я проверяю условие. Я хочу исключить десятичные значения, если @ tbt = 1.

Например, если @ tbt = 1, то 15 если @ tbt = 0, тогда 15,233

  declare @tbt int =1

   1) select 
    CASE WHEN @tbt=1 THEN CONVERT(DECIMAL(24,0),15.23335)
    ELSE CONVERT(DECIMAL(24,3),15.23335) END

   2) select 
    CASE WHEN @tbt=1 THEN '1'
    ELSE '2' END

Первый запрос вернет 15.000.
1. Можно ли получить 15?
2. Если CONVERT(DECIMAL(24,0),15.23335) возвращает 15. то почему оно приходит 15.000 в запросе.
Для проверки я использовал другой запрос, и он напечатает 2.

Спасибо

Ответы [ 4 ]

2 голосов
/ 07 марта 2011

вы можете использовать ваше текущее решение и добавить дополнительное приведение к Varchar (30) на обоих.

2 голосов
/ 07 марта 2011

Вы не можете заставить его вернуть 2 отдельных типа данных в зависимости от CASE.

Если вы вставите этот результат в таблицу с использованием синтаксиса SELECT INTO, вы фактически увидите, что тип данных не DECIMAL (24,0), а DECIMAL (27,3)

т.е.

 declare @tbt int =1

 select 
 CASE WHEN @tbt=1 THEN CONVERT(DECIMAL(24,0),15.23335)
 ELSE CONVERT(DECIMAL(24,3),15.23335) END AS Col
 INTO SomeTestTable

 --Now check the SomeTestTable schema

Итак, то, что сделал SQL Server, рационализировало его до единого определения типа данных, которое может соответствовать ОБА случаям.

0 голосов
/ 08 марта 2011

Благодаря bw_üezi я получил ответ после рассмотрения его совета.спасибо за все остальные.

Вот мой ответ ..

declare @tbt int =0
  select 
  CASE WHEN @tbt=1 THEN CAST(CONVERT(DECIMAL(24,0),15.23335)AS NVARCHAR)
  ELSE CAST(CONVERT(DECIMAL(24,3),15.23335)AS NVARCHAR) END
0 голосов
/ 07 марта 2011
WITH T(tbt, val) AS
(
select 1,15.23335 UNION ALL
select 0,15.23335
)

Select 
    CASE WHEN tbt=1 THEN cast( CONVERT(DECIMAL(24,0),val) as sql_variant)
    ELSE CONVERT(DECIMAL(24,3),val) END
FROM T    

возвращает

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