Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да получите n-тия низ във всяка обща дума или изречение с разделител за интервал

Чрез използване на instr .

select substr(help, 1, instr(help,' ') - 1)
  from ( select 'hello my name is...' as help
           from dual )

instr(help,' ') връща позиционния индекс на първото появяване на втория аргумент в първия, включително низа, който търсите. т.е. първото срещане на ' ' в низа 'hello my name is...' плюс пространството.

substr(help, 1, instr(help,' ') - 1) след това взема входния низ от първия знак до индекса, посочен в instr(... . След това премахвам един, така че пространството да не е включено..

За n-то срещане просто променете това леко:

instr(help,' ',1,n) е n-тият поява на ' ' от първия знак. След това трябва да намерите позиционния индекс на следващия индекс instr(help,' ',1,n + 1) , накрая разберете разликата между тях, за да знаете докъде да стигнете във вашия substr(... . Докато търсите n-тия , когато n е 1 това се разваля и трябва да се справите с него, ето така:

select substr( help
             , decode( n
                     , 1, 1
                     , instr(help, ' ', 1, n - 1) + 1
                       )
             , decode( &1
                     , 1, instr(help, ' ', 1, n ) - 1
                     , instr(help, ' ', 1, n) - instr(help, ' ', 1, n - 1) - 1
                       )
               )
  from ( select 'hello my name is...' as help
           from dual )

Това също ще се повреди при n . Както можете да видите, това става нелепо, така че може да обмислите използването на regular expressions

select regexp_substr(help, '[^[:space:]]+', 1, n )
  from ( select 'hello my name is...' as help
           from dual )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY с MAX(DATE)

  2. Как да изтриете записите въз основа на предишни и следващи редове и да зададете дата въз основа на определени условия

  3. Съхранявайте Blob от Java към BD:Размерът на данните е по-голям от максималния размер за този тип, когато очевидно не е

  4. Защо получавам тази грешка? Не може да се вмъкне нула в „VALUE.VALUE_TX“

  5. Как да създам таблица с ограничения, докато изтеглям данни от друга таблица