Получение последнего слова от строки Пост-ГРЭС, декларативно

[РЕДАКТИРОВАНИЕ] оригинальное название этого вопроса "Получало последний элемент массива Пост-ГРЭС, декларативно"

Как получить последний элемент массива в Пост-ГРЭС?

Я должен сделать это декларативно, поскольку я хочу использовать его в качестве ORDER BY критерии. Я не хотел бы создавать специальную функцию PGSQL для него, чем меньше изменений в базе данных, тем лучше в этом случае.

На самом деле то, что я хочу сделать, должно отсортировать по последнему слову определенного столбца, содержащего несколько слов. Изменение модели не является опцией здесь.

Другими словами, я хочу продвинуть Ruby sort_by {|x| x.split[-1]} на уровень базы данных. Я могу разделить значение на массив слов с Пост-ГРЭС string_to_array или regexp_split_to_array функции, затем как получить его последний элемент?

19
задан Wojciech Kaczmarek 30 June 2016 в 15:06
поделиться

2 ответа

Используйте array_upper () :

SELECT array_upper(ARRAY[1,2,5,6], 1);
13
ответ дан 30 November 2019 в 02:09
поделиться

Отредактировано: ЭТО НЕПРАВИЛЬНО - ПРАВИЛЬНЫЙ ОТВЕТ СМ. НИЖЕ -

Думаю, вы должны использовать array_length () :

SELECT string_to_array('hi guys, welcome', ' ') AS arr INTO temparr;
SELECT * FROM temparr;
         arr
----------------------
 {hi,"guys,",welcome}

SELECT arr[array_length(arr,1)] FROM temparr;
   arr
---------
 welcome

Чтобы использовать это декларативно (на лету), вы можете создать небольшую функцию SQL:

CREATE FUNCTION last_elem (text[]) RETURNS text AS $$
 SELECT $1[array_length($1,1)];
$$ LANGUAGE SQL;


 select last_elem(string_to_array('hi guys, welcome', ' '));
 last_elem
-----------
 welcome

------- РЕДАКТИРОВАТЬ - ПРАВИЛЬНЫЙ ОТВЕТ СЛЕДУЕТ ----------------------

Выше неверно, потому что в Postgresql массивы иногда могут быть неоднородными.

Правильный способ - использовать array_upper ()

CREATE FUNCTION last_elem (text[]) RETURNS text AS $$
 SELECT $1[array_upper($1,1)];
$$ LANGUAGE SQL;


 select last_elem(string_to_array('hi guys, welcome', ' '));
 last_elem
-----------
 welcome
1
ответ дан 30 November 2019 в 02:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: