sql >> Databasteknik >  >> RDS >> Oracle

Använd som '%' och matcha NULL-värden med NUMBER kolumner

Det verkar som att du gör livet svårt för dig själv. Lämna dem null och gör sedan:

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

Om param1 (procedurargumentet; livet är enklare när dina parameter-/variabelnamn och kolumnnamn är olika... så jag har ändrat kolumnnamnen för att göra det lite tydligare) är null det ignoreras i princip* och alla rader passerar den delen för filtret, om kolumnvärdet är null eller inte. Om param2 är inte null då is null kontrollera om det misslyckas och endast rader med kolumnvärden (inte null) som matchar param2 värde uppfyller den delen av filtret.

* Villkor i en or kan utvärderas i valfri ordning; att sätta is null check first betyder inte nödvändigtvis like kommer inte att utvärderas - men optimeraren är ganska smart med sånt där



  1. Begränsa med villkorad värdekontroll i MySQL

  2. Finns det en SQL-sats som kommer att dela upp vad som skulle vara två långa kolumner i flera kolumnpar?

  3. ändra tabellnamnet till versaler

  4. Enkel indexeringsoptimering