sql >> Databasteknik >  >> RDS >> Oracle

Oracle-frågedata där kolumnvärde med kommatecken för att kontrollera värdet innehåller eller inte

Du måste leta efter en delsträng omgiven av avgränsningstecken:

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

Ett bättre sätt skulle dock vara att ändra din databastabell så att du inte lagrar flera objekt i ett värde:

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

Sedan kan du lagra värdena individuellt (och enkelt söka efter undernätsintervall) och koppla dem till profiltabellen efter behov.



  1. Lata hämta en kolumn (klassattribut) med Hibernate

  2. Oracle - Med en en till många-relation väljer du distinkta rader baserat på ett min-värde

  3. PL/SQL skriver om sammanfogad fråga med 'IN'-klausul

  4. Bästa praxis för flerspråkig databasdesign