Pregunta

Con el fin de realizar un caso sensible a buscar/reemplazar en una tabla en SQL Server 2000/2005 de la base de datos, debe utilizar la intercalación correcta.

¿Cómo se puede determinar si la intercalación predeterminada de la base de datos es sensible a mayúsculas, y si no lo es, cómo llevar a cabo un caso sensible a buscar/reemplazar?

¿Fue útil?

Solución

SELECT testColumn FROM testTable  
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'example' 

SELECT testColumn FROM testTable
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'EXAMPLE' 

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 

No asuma que la intercalación predeterminada será sensible a mayúsculas y minúsculas, sólo tiene que especificar un caso sensible a uno cada vez (mediante el correspondiente a su idioma, por supuesto)

Otros consejos

Determinar si la intercalación predeterminada es sensible a mayúsculas como este:

select charindex('RESULT', 'If the result is 0 you are in a case-sensitive collation mode')

Un resultado de 0 indica que está en un caso sensible a la intercalación modo, 8 indica que es sensible a las mayúsculas.

Si la intercalación es sensible a las mayúsculas, debe declarar explícitamente la intercalación de modo que desea utilizar cuando se realiza una búsqueda/reemplazo.

He aquí cómo construir una instrucción UPDATE para realizar un caso sensible a buscar/reemplazar especificando la intercalación modo de uso:

update ContentTable
set ContentValue = replace(ContentValue COLLATE Latin1_General_BIN, 'THECONTENT', 'TheContent')
from StringResource
where charindex('THECONTENT', ContentValue COLLATE Latin1_General_BIN) > 0

Esto coincidirá y reemplazar 'THECONTENT', pero no 'TheContent' o 'thecontent'.

Si usted tiene diferentes casos de la misma palabra en el mismo campo, y lo único que quieres reemplazar casos específicos, entonces usted puede utilizar la intercalación en su REPLACE función:

UPDATE tableName
SET fieldName = 
    REPLACE(
        REPLACE(
            fieldName COLLATE Latin1_General_CS_AS,
            'camelCase' COLLATE Latin1_General_CS_AS,
            'changedWord'
        ),
        'CamelCase' COLLATE Latin1_General_CS_AS,
        'ChangedWord'
    )

Esto resultará en:

This is camelCase 1 and this is CamelCase 2

cada vez:

This is changedWord 1 and this is ChangedWord 2

Se puede hacer en varias declaraciones.Este no trabajo si usted tiene el tiempo de cadenas que contienen tanto en mayúscula, una minúscula las palabras que desea reemplazar.También puede ser necesario el uso de intercalación diferente este es el acento y entre mayúsculas y minúsculas.

UPDATE T SET [String] = ReplacedString
FROM [dbo].[TranslationText] T, 
    (SELECT [LanguageCode]
      ,[StringNo]
      ,REPLACE([String], 'Favourite','Favorite') ReplacedString
    FROM [dbo].[TranslationText]
    WHERE 
    [String] COLLATE Latin1_General_CS_AS like '%Favourite%'
    AND [LanguageCode] = 'en-us') US_STRINGS
WHERE 
T.[LanguageCode] = US_STRINGS.[LanguageCode] 
AND T.[StringNo] = US_STRINGS.[StringNo]

UPDATE T SET [String] = ReplacedString
FROM [dbo].[TranslationText] T, 
    (SELECT [LanguageCode]
      ,[StringNo]
      , REPLACE([String], 'favourite','favorite') ReplacedString 
    FROM [dbo].[TranslationText]
    WHERE 
    [String] COLLATE Latin1_General_CS_AS like '%favourite%'
    AND [LanguageCode] = 'en-us') US_STRINGS
WHERE 
T.[LanguageCode] = US_STRINGS.[LanguageCode] 
AND T.[StringNo] = US_STRINGS.[StringNo]

En primer lugar, verificar esto:http://technet.microsoft.com/en-us/library/ms180175(SQL.90).aspx

Usted verá que CI especifica entre mayúsculas y minúsculas y CS especifica entre mayúsculas y minúsculas.

También, esto podría ser útil.select * from fn_helpcollations() - esto se pone todas las intercalaciones su servidor soporta.select * from sys.bases de datos - aquí hay una columna que especifica lo que intercalación tiene cada base de datos en su servidor.

Puede especificar la intercalación cada vez que se consulta la tabla o puede aplicar la intercalación de la columna(s) de forma permanente mediante la alteración de la tabla.

Si usted decide hacer el método de consulta a sus beneficioso para incluir el caso de insensible la búsqueda de los argumentos.Usted verá que el SQL elegir de una manera más eficiente exec plan si los incluye.Por ejemplo:

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 
    and testColumn = 'eXaMpLe'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top