Что означает ":: int []" в строке SQL ниже? - PullRequest
2 голосов
/ 22 сентября 2019

Я пытаюсь понять строчный код SQL в приложении RoR.Кто-нибудь знает, что означает :: int []?Он появляется в каждом «падеже» после «и».

        case
        when (array_length(array_remove(company_profiles.blocked_trails_ids,null),1) IS NOT NULL) and array[trails.id]::int[] && array_remove(company_profiles.blocked_trails_ids,null) then
          false
        else
          true
        end and
        case
        when (array_length(array_remove(company_profiles.blocked_components_ids,null),1) IS NOT NULL) and array[components.id]::int[]&& array_remove(company_profiles.blocked_components_ids,null) then
          false
        else
          true
        end and
        case
        when (array_length(array_remove(company_profiles.blocked_academies_ids,null),1) IS NOT NULL) and array[academies.id]::int[] && array_remove(company_profiles.blocked_academies_ids,null) then
          false
        else
          true
        end

1 Ответ

3 голосов
/ 22 сентября 2019

В PostgreSQL каждый тип данных имеет тип сопутствующего массива.Если вы определяете свой собственный тип данных, PostgreSQL создает для вас соответствующий тип массива в фоновом режиме.Например, целое число имеет целочисленный тип массива целых чисел [], символ имеет тип массива символьных символов [] и т. Д.

:: - приведение типа, преобразование одного типа данных в другой..


Обратите внимание, что эта строка array[components.id]::int[]&& array_remove(...) может работать не так, как ожидалось.

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