with starting start number example characters sql sql-server-2005 internationalization

starting - sql wildcard number



Operador SQL ''Me gusta'' y ''aa'' (3)

select ''match!'' where ''teliaa'' like ''%telia%''

da ''partido''! como salida en mi sql-2008 (SP1) 10.0.2531.0 (x64)

no puedo responder tu pregunta ...

Nos hemos topado con un problema muy extraño en una de nuestras aplicaciones. El motor de búsqueda utiliza un procedimiento almacenado para comparar un grupo de filtros. Sin embargo, cuando se inserta un tipo específico de cadena, el servidor sql (2005) se comporta de forma muy extraña. He aislado el problema a lo siguiente:

select ''match!'' where ''teliaa'' like ''%telia%''

La recopilación es IC noruega danesa y tenemos caracteres que significan lo mismo. Esto incluye ''aa'' que también significa ''å''.

¿Alguien puede explicar por qué la declaración anterior no da ''coincidencia''?


La intercalación no coincidirá automáticamente "aa" con "å".

Se asegurará de que "å" esté ordenada correctamente y algunas otras cosas, pero no las sustituirá . Lo mismo aplica "ss" vs "ß" en alemán, por ejemplo

Tendría que limpiar los datos de una forma u otra.

SELECT REPLACE (''teliå'', ''å'', ''aa''), /* ...or */REPLACE (''teliaa'', ''aa'', ''å'')

Editar, mayo de 2013

Supongo que no coincide con aa en esa colación. Sin embargo, se ordena correctamente

DECLARE @foo TABLE (bar varchar(2)) INSERT @foo VALUES (''Ab''),(''Aa''),(''aa''), (''å''), (''Za''); SELECT * FROM @foo ORDER BY bar COLLATE Danish_Norwegian_CI_AS; SELECT * FROM @foo WHERE bar COLLATE Danish_Norwegian_CI_AS = ''Aa''; SELECT * FROM @foo WHERE bar COLLATE Danish_Norwegian_CI_AS = ''a''; SELECT * FROM @foo WHERE bar COLLATE Danish_Norwegian_CI_AS = ''å'';


La intercalación es la colección de reglas para comparar caracteres, más útil para la clasificación. Algunos dicen que solo afecta la clasificación, esto no es del todo correcto. De https://technet.microsoft.com/en-us/library/aa174903%28v=sql.80%29.aspx

Una intercalación de SQL Server define cómo el motor de la base de datos almacena y opera en caracteres y datos Unicode.

Como ejemplo, en las intercalaciones insensibles a los acentos Danish_Norwegian coincide con ''aa'' con ''å''. Los nombres que comienzan con ''aa'' se ordenan junto con nombres que comienzan con ''å''. Sin embargo, también afecta las comparaciones y el operador LIKE. Aquí hay algunas cadenas de consulta que ilustran esto.

select ''match!'' where ''teliaa'' collate Latin1_General_100_CI_AI like ''%telia%'' --yields "match!" select ''match!'' where ''teliaa'' collate Latin1_General_100_CI_AS like ''%telia%'' --yields "match!" select ''match!'' where ''teliaa'' collate Latin1_General_100_CS_AI like ''%telia%'' --yields "match!" select ''match!'' where ''teliaa'' collate Latin1_General_100_CS_AS like ''%telia%'' --yields "match!" select ''match!'' where ''teliaa'' collate Danish_Norwegian_CI_AI like ''%telia%'' --no rows select ''match!'' where ''teliaa'' collate Danish_Norwegian_CI_AS like ''%telia%'' --no rows select ''match!'' where ''teliaa'' collate Danish_Norwegian_CS_AI like ''%telia%'' --no rows select ''match!'' where ''teliaa'' collate Danish_Norwegian_CS_AS like ''%telia%'' --no rows select ''match!'' where ''teliaa'' collate Danish_Norwegian_CI_AI like ''%å%'' --yields "match!" select ''match!'' where ''teliaa'' collate Danish_Norwegian_CI_AS like ''%å%'' --no rows select ''match!'' where ''teliaa'' collate Danish_Norwegian_CS_AI like ''%å%'' --yields "match!" select ''match!'' where ''teliaa'' collate Danish_Norwegian_CS_AS like ''%å%'' --no rows

Dependiendo de su necesidad, si necesita hacer coincidir ''aa'' con ''å'', tratándolos igual, luego seleccione una intercalación que admita esto en su consulta o almacén de datos / columnas. De lo contrario, seleccione una intercalación como Latin1_General_100_CI_AI.