Условное приведение типа столбца - PullRequest
0 голосов

у меня есть подзапрос, который возвращает мне столбец varchar, в некоторых случаях этот столбец содержит только числовые значения, и в этом случае мне нужно преобразовать этот столбец в bigint, я пытаюсь использовать конструкцию CAST (case ...),но CASE - это выражение, которое возвращает один результат и независимо от пути, к которому он всегда должен приводить, к одному и тому же типу данных (или неявно преобразуемому в один и тот же тип данных).Есть ли какой-нибудь хитрый способ изменить тип данных столбца в зависимости от условий в PostgreSQL или нет?Google не может помочь мне ((

SELECT 
        prefix, 
        module, 
        postfix,
        id,
        created_date
        FROM 
           (SELECT 
           s."prefix", 
           coalesce(m."replica", to_char(CAST((m."id_type" * 10 ^ 12) AS bigint) + m."id", 'FM0000000000000000')) "module", 
           s."postfix", 
           s."id",  
           s."created_date" 
           FROM some_subquery

1 Ответ

0 голосов
/ 24 мая 2018

Там действительно нет способа делать то, что вы хотите.

Запрос SQL возвращает фиксированный набор столбцов с фиксированными именами и типами.Итак, a priori то, что вы хотите сделать, не очень хорошо вписывается в SQL.

Вы можете обойти это, придумав свой собственный тип, который является либо большим целым числом, либо строкой.Вы можете сохранить значение как JSON.Но это обходные пути.Сам запрос SQL действительно возвращает один «тип» для каждого столбца;так работает SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...