Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Dados de consulta Oracle onde valor da coluna com vírgula para verificar se o valor contém ou não


Você precisa verificar se há uma substring cercada pelos delimitadores:
SELECT PROFILEID
FROM   WA_BT_TBL_PROFILE P
WHERE  ', ' || P.ALLOWED_IP_ADDRESS || ', ' LIKE '%, 192.168.183.28, %';

No entanto, uma maneira melhor seria alterar sua tabela de banco de dados para não armazenar vários itens em um valor:
CREATE TABLE Allowed_IP_Addresses(
  PROFILEID          VARCHAR2(20)
                     CONSTRAINT AllowIP__ProfileID__FK REFERENCES WA_BT_TBL_PROFILE( PROFILEID ),
  CLASSA             NUMBER(3,0),
  CLASSB             NUMBER(3,0),
  CLASSC             NUMBER(3,0),
  CLASSD             NUMBER(3,0),
  IP_ADDRESS         VARCHAR2(15)
                     GENERATED ALWAYS AS (CLASSA||'.'||CLASSB||'.'||CLASSC||'.'||CLASSD) VIRTUAL,
  CONSTRAINT AllowIP__P_A_B_C_D__PK PRIMARY KEY ( PROFILEID, CLASSA, CLASSB, CLASSC, CLASSD )
);

Em seguida, você pode armazenar os valores individualmente (e pesquisar facilmente por intervalos de sub-rede) e juntá-los à tabela de perfis conforme necessário.