sql >> Database >  >> RDS >> Oracle

Oracle-querygegevens waarbij kolomwaarde met komma om te controleren of de waarde al dan niet bevat

U moet controleren of er een subtekenreeks tussen de scheidingstekens staat:

SELECT PROFILEID
FROM   WA_BT_TBL_PROFILE P
WHERE  ', ' || P.ALLOWED_IP_ADDRESS || ', ' LIKE '%, 192.168.183.28, %';

Een betere manier is echter om uw databasetabel te wijzigen, zodat u niet meerdere items in één waarde opslaat:

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 )
);

Vervolgens kunt u de waarden afzonderlijk opslaan (en eenvoudig zoeken naar subnetbereiken) en deze indien nodig toevoegen aan de profieltabel.



  1. Codeigniter simple_query vs. query builder (invoegen, bijwerken en verwijderen)

  2. Slechts één actief voor elke relatiebeperking

  3. toegang geweigerd bij een poging om verbinding te maken met mysql met behulp van Tomcat-gegevensbron

  4. Mysql voegt willekeurige datetime in een bepaald datetime-bereik in