sql >> Base de Datos >  >> RDS >> SQLite

Cómo hacer que el operador LIKE de SQLite distinga entre mayúsculas y minúsculas

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.