У меня есть таблица людей. Каждый человек может иметь несколько regnums (в основном целые числа, но некоторые вроде M/2344 и W345). Чтобы сделать вещи немного сложнее, есть NULL, пустые и строчные строки, такие как «NA». Из-за их непредсказуемой композиции регионы хранятся в поле текстового массива (например, {12345, M/2344} и {3459, NA}).Текстовый массив PostgreSQL - запрос как целое, игнорируя цифры
Поскольку большинство людей regnums, которые могут быть обработаны как целые числа, я хотел бы быть в состоянии сделать что-то с этим полем, как найти людей, с между ИА REGNUM, скажем, 491555 и 491685.
Я пробовал:
SELECT id,forename,surname,regnum FROM (SELECT *, unnest(regnum) reg FROM people) as TBL WHERE reg BETWEEN '491555' AND '491685';
но результаты включают в себя вне допустимого диапазона regnums, например, 49162. Я предполагаю, что это потому, что безгнездное поле ИА REGNUM еще текстовое поле
Я также попытался литье Регнума как целое поле - unnest(regnum::integer[])
- но я получаю ошибки (?): Error in query: ERROR: invalid input syntax for integer: "NA"
I думаю, что я на правильном пути, но я не понимаю, как игнорировать не-int-like regnums. Есть идеи?
Я не знаю, если PostgreSQL имеет эту возможность, но я хотел бы попробовать установки 'CASE' как часть выбора, где проверяется значение столбца, если это число и: Если да, то возвращение число, в противном случае возвращает очень большое число (которое никогда не будет включено в диапазон или любую другую исключающую стоимость е). – FDavidov
Спасибо @FDavidov. Я решил, что это придет к делу, но я не мог понять все правильно. – Greg