Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 помогите pls  [new]
SunJun
Member

Откуда:
Сообщений: 135
если есть id
200222,201520,350151,110000,250120
как узнать кроме 0 все цифры одинаковы или нет

т.е мне нужно из этих выбрать только 200222, 110000

можно ли обойтись без case?
9 апр 11, 22:39    [10496274]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
-2-
Member

Откуда:
Сообщений: 15330
SunJun,

купучз_like
9 апр 11, 23:03    [10496312]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
SunJun
можно ли обойтись без case?


Use regexp_like + backreference:

with t as (
           select 200222 id from dual union all
           select 201520 from dual union all
           select 350151 from dual union all
           select 110000 from dual union all
           select 250120 from dual
          )
select  id
  from  t
  where regexp_like(id,'([1-9])\1')
/

        ID
----------
    200222
    110000

SQL> 

SY.
9 апр 11, 23:08    [10496319]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SunJun
Member

Откуда:
Сообщений: 135
regexp?
9 апр 11, 23:08    [10496320]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SunJun
Member

Откуда:
Сообщений: 135
спасибо
9 апр 11, 23:12    [10496329]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
-2-
Member

Откуда:
Сообщений: 15330
[src oracle]'([1-9])\1'[/quot]01010101
00112233
9 апр 11, 23:21    [10496348]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 940
-2-
[src oracle]'([1-9])\1'
01010101
00112233[/quot]

Какой то quote-nested-src-оracle некошерный...
Но понятно, что имелось в виду (камень в сторону SY)

Best regards

Maxim
10 апр 11, 00:05    [10496439]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
для 9-ки
with t as (
           select 200222 id from dual union all
           select 201520    from dual union all
           select 350151    from dual union all
           select 110000    from dual union all
           select 250120    from dual union all
           select 01010101  from dual union all
           select 00112233  from dual
          )
select  id, new_id
  from  (select replace(id, '0', '') new_id, id from t)
 where translate(new_id, '-'||substr(new_id, 1, 1), '-') is null
Row#IDNEW_ID
12002222222
211000011
310101011111
10 апр 11, 00:34    [10496490]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 940
SQL> with t as (
  2   select 200222 id from dual union all
  3   select 201520       from dual union all
  4   select 350151       from dual union all
  5   select 110000       from dual union all
  6   select 250120       from dual union all
  7   select 01010101  from dual union all
  8   select 00112233  from dual
  9  )
 10  select     id
 11    from     t
 12          where ltrim(
 13            replace(id,'0'),
 14                  substr(replace(id,'0'),1,1)
 15          ) is null
 16  /

        ID
----------
    200222
    110000
   1010101

Best regards

Maxim
10 апр 11, 00:57    [10496533]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
-2-
Member

Откуда:
Сообщений: 15330
и все-таки regexp_like
^0*([1-9])(0|\1)+$
10 апр 11, 01:14    [10496577]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Maxim Demenko
Но понятно, что имелось в виду (камень в сторону SY)


Yeap, I misunderstood the question. I thought find id with more than one digit (except 0) in a row. If whole id should be same digits + optional 0:

with t as (
           select 200222 id from dual union all
           select 201520    from dual union all
           select 350151    from dual union all
           select 110000    from dual union all
           select 250120    from dual union all
           select 01010101  from dual union all
           select 00112233  from dual
          )
select  id  from  t
  where regexp_like(replace(id,'0'),'^([1-9])\1+$')
/

        ID
----------
    200222
    110000
   1010101

SQL> 

SY.
10 апр 11, 01:15    [10496579]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
And with less letters:

with t as (
           select 200222 id from dual union all
           select 201520    from dual union all
           select 350151    from dual union all
           select 110000    from dual union all
           select 250120    from dual union all
           select 01010101  from dual union all
           select 00112233  from dual
          )
select  id  from  t
  where regexp_like(replace(id,'0'),'^(\d)\1+$')
/

SY.
10 апр 11, 01:19    [10496588]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
Elic
Member

Откуда:
Сообщений: 29990
ltrim(replace(id,'0')/substr(id,1,1),1) is null
10 апр 11, 07:42    [10496804]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Elic
ltrim(replace(id,'0')/substr(id,1,1),1) is null


This will return id=0 and id is null.

SY.
10 апр 11, 15:50    [10497540]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
SY
Elic
ltrim(replace(id,'0')/substr(id,1,1),1) is null


This will return id=0 and id is null.

SY.
а почему бы и нет?
10 апр 11, 16:36    [10497698]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
andreymx
а почему бы и нет?


Then:

ltrim(id,substr(id,1,1) || '0') is null

SY.
10 апр 11, 16:57    [10497747]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
SY,

+1
10 апр 11, 17:34    [10497804]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
Elic
Member

Откуда:
Сообщений: 29990
SY
Then:
ltrim(id,substr(id,1,1) || '0') is null
Главное вовремя увести мысль от "купучз" :)
10 апр 11, 18:05    [10497858]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SunJun
Member

Откуда:
Сообщений: 135
where (REPLACE(REPLACE(id, '0'),
substr(REPLACE(id, '0'),1,1)
)) is null
11 апр 11, 13:31    [10500715]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
SunJun,

вариант SY ты не переплюнул
11 апр 11, 13:41    [10500807]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
-2-
Member

Откуда:
Сообщений: 15330
andreymx
вариант SY ты не переплюнул
Просто он неправильный, поэтому может позволить себе быть короче.
11 апр 11, 13:52    [10500902]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SunJun
Member

Откуда:
Сообщений: 135
Дорогой andreymx,

просто еще один вариант!
11 апр 11, 15:26    [10501597]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
-2-
andreymx
вариант SY ты не переплюнул
Просто он неправильный, поэтому может позволить себе быть короче.
вы бы уточнили, кто неправильный - SY или его вариант
и почему :)
11 апр 11, 15:39    [10501701]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
-2-
Member

Откуда:
Сообщений: 15330
andreymx
и почему :)
В предположении, что ID нецелкочисловой и может начинаться с 0.
11 апр 11, 15:54    [10501818]     Ответить | Цитировать Сообщить модератору
 Re: помогите pls  [new]
SQL Bigot
Member

Откуда:
Сообщений: 841
SunJun
...просто еще один вариант!...


where to_number(replace(id,substr(id,1,1),'0'))=0
11 апр 11, 15:54    [10501822]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить