Как избежать округления целого числа при преобразовании строки с десятичной точкой в ​​ЦИФРОВУЮ.? - PullRequest
0 голосов
/ 03 января 2019

Я попытался преобразовать строку с десятичной точкой в ​​ЦИФРОВУЮ.При преобразовании этого я получил целочисленное значение как округление.Я не хочу получать это целое число как округленное значение.

Случай 1: Например:

DECLARE @val varchar(10);
SET @val = 454.6;
SELECT (CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1 THEN
CAST( CAST( @val AS VARCHAR(MAX) ) AS NUMERIC ) ELSE NULL END)

Если я запусту это, я получузначение в виде округленного целого числа как 455 .

Но мне нужно значение как 454 , избегая округленного целого числа.

Случай 2 :

Если я преобразовал это значение из строки в целое число, я получил проблему, как показано ниже:

Ошибка: SQLSTATE [22018]: [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Преобразование не удалось при преобразовании значения varchar '454.6' в тип данных int.

Пожалуйста, дайте мне знать, если у кого-то есть идеи по этому поводу,

Спасибо, Matheswaran.S enter image description here enter image description here

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы можете использовать функцию FLOOR для захвата целой части десятичной дроби как:

DECLARE @val varchar(10);
SET @val = 454.6;
SELECT 
    CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1 
        THEN FLOOR(CAST( CAST( @val AS VARCHAR(MAX) ) AS DECIMAL(18, 3) ) )
        ELSE NULL END

Или ... таким же образом и немного более компактным:

DECLARE @val varchar(10) = '454.6';
SELECT 
    CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1 
        THEN FLOOR(CAST(@val AS DECIMAL(18, 3) ) )
        ELSE NULL END
0 голосов
/ 03 января 2019

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

DECLARE @val varchar(10);
SET @val = 454.6;

select  Cast([decimal] as int) from
(select convert(decimal(10,4), @val) as decimal) as a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...