У меня есть столбец с типом данных varchar2, данные в нем имеют формат:
100323.3819823.222
100.323123.443422
1001010100.233888
LOL12333.DDD33.44
Мне нужно удалить всю часть после первого появления '.'
В итоге должно получиться так:
100323
100
1001010100
LOL12333
Кажется, я не могу найти точное выражение подстроки из-за того, что нет фиксированной длины первой части.
Добавьте одну строку без . и одну строку только с . и т. д. и соответствующим образом скорректируйте ожидаемый результат.


Один из способов — использовать REGEXP_SUBSTR:
SELECT REGEXP_SUBSTR(column_name,'^[^.]*') FROM table
Другой способ - объединить SUBSTR с INSTR, что немного быстрее, но приведет к NULL, если данные не содержат точки, поэтому вам придется добавить переключатель, если это необходимо:
SELECT SUBSTR(column_name, 1, INSTR(column_name,'.') - 1) FROM table
с дополнительным наблюдением, что решение SUBSTR + INSTR будет немного быстрее, если это важно.
Для оракула вы можете попробовать это:
select substr (i,1,Instr(i,'.',i)-1) from Table name.
Я не знаком с символом @ в Oracle SQL. Вы уверены, что ваше решение работает с базой данных Oracle?
Вы должны заменить @t на имя вашей таблицы. Я не уверен, доступен ли charindex в Oracle.
Oracle не имеет функции CHARINDEX.
Насколько я могу судить, CHARINDEX существует только в SQL-сервер. К вашему сведению, у Oracle есть функция INSTR. Разве вы не видели тег «оракул» в этом вопросе?
Вы знаете о Oracle REGEXP_SUBSTR?