2014-10-01 2 views
7

В SQL, как выбрать строки таблицы, где столбец (тип данных: number) равен Infinity на Oracle 10g?Выбрать, где число равен Infinity

select * from MYTABLE where MYCOLUMN = Infinity; 
+1

Какой тип данных столбца? – Sasse

+0

@Sasse Это 'номер'. – BnJ

+1

Какую базу вы используете? – Sasse

ответ

7

От Laurent Schneider:

select * from MYTABLE where MYCOLUMN = binary_double_infinity; 

Или с неявной броском, просто:

select * from MYTABLE where cast(MYCOLUMN as binary_double) = binary_double_infinity; 

Или с помощью the is infinite floating point condition:

select * from MYTABLE where cast(MYCOLUMN as binary_double) is infinite; 

Я хотел бы присоединить SQL скрипку, но Лоран отметил: «Ожидайте множество ошибок с вашими клиентами оракула»; это работает в SQL Developer, но SQL Fiddle получает числовое переполнение.

+0

Хорошо, я не знал, что 'бесконечно'. –

+0

@LalitKumarB - не был я до нескольких минут назад и экспериментировал, чтобы понять, почему 'is inf' не работает * 8-) –

2

Давайте посмотрим сначала, как получить Infinity:

SQL> SELECT 1/0F COL FROM DUAL 
    2/

     COL 
---------- 
     Inf 

Теперь давайте посмотрим на сравнение:

SQL> WITH DATA AS(
    2 SELECT 1/0F COL FROM DUAL) 
    3 SELECT * FROM data WHERE col = binary_double_infinity 
    4/

     COL 
---------- 
     Inf 

Update: Благодаря Alex, предложение is infinite является также вариант.

Я нахожусь на 12.1.0.1.

тот же запрос с is infinite пункта:

SQL> WITH DATA AS(
    2 SELECT 1/0F COL FROM DUAL) 
    3 SELECT * FROM data WHERE col is infinite 
    4/

     COL 
---------- 
     Inf 
+0

Как бесконечные тесты как для положительной, так и для * отрицательной * бесконечности, дополнительный предикат' и n> 0' следует добавить, чтобы получить тот же результат, что и для 'col = binary_double_infinity'. –

Смежные вопросы