LINUX.ORG.RU

Получить строки, которые нельзя привести к UUID

 ,


0

1

Иcпользую СУБД Postgresql, поле у таблицы типа text, в нем могут быть UUID в виде строки, либо произвольные строки

например

‘033d111a-d046-4dcc-8beb-0f074a4b12r3’

‘jdfhfhfhfhfhfhfhfh’

‘1801b6a3-2b7b-429a-ada8-f54c5b00ee87’

Мне нужно написать запрос и достать записи, где обычные строки, а не строки вида UUID, возможно ли это сделать?

SELECT * FROM mytable WHERE (mycolumn !~ E'^[[:xdigit:]]{8}-([[:xdigit:]]{4}-){3}[[:xdigit:]]{12}$');
karaien ★★
()

Регуляркой или еще можно попробовать вот через преобразование типов. Сперва создать вот такую процедуру:

CREATE OR REPLACE FUNCTION uuid_or_null(str text)
RETURNS uuid AS $$
BEGIN
  RETURN str::uuid;
EXCEPTION WHEN invalid_text_representation THEN
  RETURN NULL;
END;
$$ LANGUAGE plpgsql;

А потом SELECT * FROM table WHERE uuid_or_null(field) IS NOT NULL.

Что будет быстрее - лично мне непонятно.

func
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.