De forma predeterminada, SQLite LIKE
El operador no distingue entre mayúsculas y minúsculas para los caracteres ASCII. Esto significa que coincidirá con los caracteres en mayúsculas y minúsculas, independientemente de las mayúsculas y minúsculas que utilice en su patrón.
Sin embargo, existe una técnica que puede utilizar para que distinga entre mayúsculas y minúsculas.
SQLite tiene una instrucción PRAGMA llamada case_Sensible_like , que está diseñado para hacer específicamente el LIKE
operador distingue entre mayúsculas y minúsculas para caracteres ASCII.
La razón por la que especifico "caracteres ASCII" es porque LIKE
El operador distingue entre mayúsculas y minúsculas de forma predeterminada para los caracteres Unicode que están más allá del rango ASCII.
Por lo tanto, si necesita el LIKE
operador sea sensible a mayúsculas y minúsculas en el rango ASCII, el case_Sensible_like La declaración PRAGMA podría ser lo que está buscando.
Esto también se aplica al like()
función, que funciona exactamente igual que LIKE
operador.
Habilitar/Deshabilitar la distinción entre mayúsculas y minúsculas
Puede usar cualquiera de los siguientes valores booleanos para habilitar la distinción entre mayúsculas y minúsculas:
1
on
true
yes
Puede utilizar cualquiera de los siguientes valores booleanos para deshabilitar la distinción entre mayúsculas y minúsculas:
0
off
false
no
El argumento puede estar entre paréntesis o puede estar separado del nombre del pragma por un signo igual.
Los argumentos de palabras clave pueden aparecer opcionalmente entre comillas.
Ejemplo que no distingue entre mayúsculas y minúsculas
Primero, veamos qué sucede cuando no usamos case_Sensible_like Declaración PRAGMA.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultado:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
En este caso, la primera columna no distingue entre mayúsculas y minúsculas:la A mayúscula coincide con la minúscula a .
Y aquí hay una consulta en una tabla de base de datos.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultado:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
En este caso, obtenemos una coincidencia contra todos los gatos cuyos nombres comienzan con Br , aunque nuestros criterios utilizaron una b minúscula .
Ejemplo de mayúsculas y minúsculas
Ahora veamos qué sucede cuando usamos case_Sensible_like Declaración PRAGMA para habilitar la distinción entre mayúsculas y minúsculas en el rango ASCII.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultado:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Así que esta vez la A mayúscula no coincidir con la minúscula a .
Y aquí está el ejemplo de la base de datos después de habilitar la distinción entre mayúsculas y minúsculas.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultado:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Tenga en cuenta que no necesitaba ejecutar la instrucción PRAGMA nuevamente. La configuración permanece en su lugar para mi conexión hasta que la cambie.
Deshabilitar la distinción entre mayúsculas y minúsculas
Este es un ejemplo de cómo deshabilitar la distinción entre mayúsculas y minúsculas y volver a ejecutar la consulta.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultado:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Función Me gusta()
Como se mencionó, el case_Sensible_like La sentencia PRAGMA también afecta a like()
función.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Resultado:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Operador LIKE compatible con Unicode
También puede usar la extensión SQLite ICU si necesita un LIKE
compatible con Unicode operador.
La implementación de LIKE
incluido en esta extensión utiliza la función ICU u_foldCase()
para proporcionar comparaciones independientes de mayúsculas y minúsculas para la gama completa de caracteres Unicode.