Как выбрать только числовые значения

Таблица 1

id

01
wire
02
steve
ram123
03
....

из таблицы1 я хочу выбрать только числовые значения, она не должна отображать буквенно-цифровые значения, такие как (ram123)

Ожидаемый результат

01
02
03
....

Как сделать запрос для этого условия


person JetJack    schedule 30.09.2012    source источник


Ответы (6)


Попробуйте ISNUMERIC

SELECT *
FROM Table1
WHERE ISNUMERIC([ID]) = 1

демонстрация SQLFiddle

person John Woo    schedule 30.09.2012

Просто хочу отметить, что IsNumeric() имеет некоторые ограничения. Например, все нижеперечисленное вернет 1.

SELECT ISNUMERIC(' - ')
SELECT ISNUMERIC(' , ')
SELECT ISNUMERIC('$')
SELECT ISNUMERIC('10.5e-1')
SELECT ISNUMERIC('$12.09')

Итак, если вы хотите выбрать ТОЛЬКО числа, то может работать что-то вроде этого:

create function [dbo].[IsNumbersOnly](@strSrc as varchar(255))
returns tinyint
as
begin

    return isnumeric(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
        @strSrc, '\', 'x'), '-', 'x'), ',', 'x'), '+', 'x'), '$', 'x'), '.', 'x'), 'e', 'x'), 'E', 'x'),
        char(9), 'x'), char(0), 'x'))
end
person Void Ray    schedule 30.09.2012
comment
Или просто используйте WHERE ID NOT LIKE '%[^0-9]%' - person GilM; 30.09.2012
comment
Это тоже сработает; просто хотел упомянуть об ограничениях... Спасибо! - person Void Ray; 30.09.2012

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

select column from table where  replace(translate(column,'0123456789','0000000000'),'0','') is null 
person sumeyrad    schedule 16.08.2017

Я попробовал приведенный выше код (ISNUMERIC()), но он почему-то не работает в Oracle SQL.
Но я нашел работающее решение для Oracle SQL:

SELECT column1
FROM Table
WHERE regexp_like( column1, '^[[:digit:]]*$');

Откуда: https://community.oracle.com/thread/2394572

person Alex Fong    schedule 02.06.2020

person    schedule
comment
SELECT * FROM @Table WHERE Col NOT LIKE '%[^0-9.-]%' - person highwingers; 01.10.2012
comment
Это показывает, что неясно, что означает Numeric. Судя по образцу данных в исходном вопросе, похоже, что это могут быть чисто числовые цифры (в этом случае этот исходный ответ правильный) или они могут включать другие символы, такие как - и .. Может быть, это означает, что Microsoft реализовала с ISNUMERIC, но я никогда не слышал, чтобы кто-то ожидал, что это означает это :-). - person GilM; 01.10.2012
comment
да GilM, я никогда не полагался на функцию isNumeric в SQL или Asp Classic. - person highwingers; 01.10.2012

person    schedule
comment
Чем этот ответ отличается от другого ответа? - person Mahmoud Gamal; 30.09.2012
comment
Этот запрос работает в Oracle - person jatin Goyal; 03.12.2017