sql >> Database >  >> RDS >> Oracle

Gebruik als '%' en match NULL-waarden met NUMBER kolommen

Dat lijkt alsof je het jezelf moeilijk maakt. Laat ze null en doe dan:

where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)

Als param1 (het procedureargument; het leven is eenvoudiger wanneer uw parameter-/variabelenamen en kolomnamen anders zijn ... dus ik heb de kolomnamen gewijzigd om het een beetje duidelijker te maken) is null, het wordt in principe genegeerd * en alle rijen passeren dat deel van het filter, ongeacht of de kolomwaarde null is of niet. Als param2 is niet null dan is de is null controleer of dat mislukt en alleen rijen met (niet-null) kolomwaarden die overeenkomen met param2 waarde voldoen aan dat deel van het filter.

* Voorwaarden in een or kan in elke volgorde worden geëvalueerd; de is null . zetten eerst controleren betekent niet noodzakelijk de like zal niet worden geëvalueerd - maar de optimizer is behoorlijk slim in dat soort dingen



  1. Probleem bij het construeren van een where-clausule om null/0-waarden op te nemen

  2. Converteer tekst naar getal in MySQL-query

  3. Invoegen in dezelfde tabel trigger mysql

  4. MySQL - GROUP_CONCAT met joins