Как определить, является ли число с плавающей запятой или целым числом в SQL Server? - PullRequest
10 голосов
/ 13 октября 2011

Мне нужно написать этот запрос на сервере SQL:

IF isFloat(@value) = 1
BEGIN
    PRINT 'this is float number'
END
ELSE
BEGIN
    PRINT 'this is integer number'
END

Пожалуйста, помогите мне с этим, спасибо.

Ответы [ 4 ]

39 голосов
/ 13 октября 2011
declare @value float = 1

IF FLOOR(@value) <> CEILING(@value)
BEGIN
    PRINT 'this is float number'
END
ELSE
BEGIN
    PRINT 'this is integer number'
END
2 голосов
/ 17 августа 2012

Мартин, при определенных обстоятельствах ваше решение дает неверный результат, если вы встречаете значение, например, 1234.0. Ваш код определяет, что 1234.0 является целым числом, что неверно.

Это более точный фрагмент:

if cast(cast(123456.0 as integer) as varchar(255)) <> cast(123456.0 as varchar(255)) 
begin 
  print 'non integer' 
end 
else 
begin 
  print 'integer' 
end

С уважением,

Nico

0 голосов
/ 01 июля 2016

Посмотрите, поможет ли приведенный ниже код. В приведенных ниже значениях только 9, 2147483647, 1234567 имеют право на целое число. Мы можем создать это как функция и может использовать это.

CREATE TABLE MY_TABLE(MY_FIELD VARCHAR(50))
INSERT INTO MY_TABLE
VALUES('9.123'),('1234567'),('9'),('2147483647'),('2147483647.01'),('2147483648'), ('2147483648ABCD'),('214,7483,648')

SELECT *
FROM MY_TABLE
WHERE CHARINDEX('.',MY_FIELD) = 0 AND CHARINDEX(',',MY_FIELD) = 0       
AND ISNUMERIC(MY_FIELD) = 1 AND CONVERT(FLOAT,MY_FIELD) / 2147483647 <= 1
DROP TABLE MY_TABLE

OR

DECLARE @num VARCHAR(100)
SET @num = '2147483648AS'
IF ISNUMERIC(@num) = 1 AND @num NOT LIKE '%.%' AND @num NOT LIKE '%,%' 
BEGIN
    IF CONVERT(FLOAT,@num) / 2147483647 <= 1
        PRINT 'INTEGER'
    ELSE
        PRINT 'NOT-INTEGER' 
END
ELSE
    PRINT 'NOT-INTEGER'
0 голосов
/ 28 мая 2016
DECLARE @value FLOAT = 1.50
IF CONVERT(int, @value) - @value <> 0
BEGIN
    PRINT 'this is float number'
END
ELSE
BEGIN
    PRINT 'this is integer number'
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...