Есть ли аналог ф-ции substring_index ?

Alex Kab
Дата: 14.07.2004 10:37:33
Добрый день.
В MySQL есть ф-ция substring_index.
Как заменить ее в pgsql?
strpos не позволяет указывать позицию, с которой начинать искать, а надо определить вхождение третьего слэша.

Реальная задача - есть строка вида:
http://www.some.host.com/some/script.html
или
ftp://1.2.4.3/
или еще что-либо. Так вот, нужно выкусить строку по третий слэш, чтобы
получилось
http://www.some.host.com/

Можно ли встроенными стринговыми ф-циями это сделать?
LeXa NalBat
Дата: 14.07.2004 11:08:25
select
 substr(
  substr(
   'http://www.ru/news/index.html',
   2+strpos(
    'http://www.ru/news/index.html',
    '/'
   )
  ),
  1+strpos(
   substr(
    'http://www.ru/news/index.html',
    2+strpos(
     'http://www.ru/news/index.html','/'
    )
   ),
   '/'
  )
 );

надеюсь, что есть способ лучше :-)
LeXa NalBat
Дата: 14.07.2004 11:12:59
select
 substr(
  'http://www.ru/news/index.html',
  0,
  length(
   substr(
    substr(
     'http://www.ru/news/index.html',
     2+strpos(
      'http://www.ru/news/index.html',
      '/'
     )
    ),
    1+strpos(
     substr(
      'http://www.ru/news/index.html',
      2+strpos(
       'http://www.ru/news/index.html','/'
      )
     ),
     '/'
    )
   )
  )
 );

бр-р-р, предыдущее вырезало path, а вот это - host
Alex Kab
Дата: 14.07.2004 11:20:49
LeXa NalBat
select
 substr(
  'http://www.ru/news/index.html',
  0,
  length(
   substr(
    substr(
     'http://www.ru/news/index.html',
     2+strpos(
      'http://www.ru/news/index.html',
      '/'
     )
    ),
    1+strpos(
     substr(
      'http://www.ru/news/index.html',
      2+strpos(
       'http://www.ru/news/index.html','/'
      )
     ),
     '/'
    )
   )
  )
 );

бр-р-р, предыдущее вырезало path, а вот это - host


Ну, если http:// поменять на ftp:// к примеру, или на goopher:// ,
то не совсем корректно, но смысл понятен..
Спасибо.
LeXa NalBat
Дата: 14.07.2004 11:29:15
автор
Ну, если http:// поменять на ftp:// к примеру, или на goopher:// , то не совсем корректно


Корректно!

--

Вот короче вариант:

select
 split_part('http://www.ru/news/index.html','/',1)||'//'||
 split_part('http://www.ru/news/index.html','/',3)||'/';