sql >> Databasteknik >  >> RDS >> Sqlserver

Varför ger mig alla resultat att använda ett Understreck i ett LIKE-filter?

Ändra din WHERE skick så här:

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

Detta är ett av sätten som Oracle stöder flyktkaraktärer på. Här definierar du escape-tecknet med escape nyckelord. För mer information se den här länken på Oracle Docs.

'_' och '%' är jokertecken i en LIKE opererad sats i SQL.

_ tecken letar efter en närvaro av (vilket som helst) ett enda tecken. Om du söker med columnName LIKE '_abc' , kommer det att ge dig resultat med rader som har 'aabc' , 'xabc' , '1abc' , '#abc' men INTE 'abc' , 'abcc' , 'xabcd' och så vidare.

'%' tecken används för att matcha 0 eller fler antal tecken. Det betyder att om du söker med columnName LIKE '%abc' , kommer det att ge dig resultat med att ha 'abc' , 'aabc' , 'xyzabc' och så vidare, men ingen 'xyzabcd' , 'xabcdd' och alla andra strängar som inte slutar med 'abc' .

I ditt fall har du sökt med '%_%' . Detta kommer att ge alla rader med den kolumnen som har ett eller flera tecken, det vill säga alla tecken, som dess värde. Det är därför du får alla rader även om det inte finns någon _ i dina kolumnvärden.



  1. SQL Server-säkerhetskopiering/återställning kontra ta bort/fästa

  2. count(*) och count(column_name), vad är skillnaden?

  3. Prestanda för COUNT SQL-funktion

  4. Lista lagrade funktioner som refererar till en tabell i PostgreSQL