2009-09-23 7 views
5

Tengo un campo que contiene cadenas como 'Blah-OVER', 'Blah-OveR', etc. y quiero seleccionarlas sin las 'sobrees'. Esto sólo capta el primer caso (por así decirlo) y no a los demás:REEMPLAZAR() insensible a las mayúsculas y minúsculas en SQL Server 2000

SELECT field as "before", REPLACE(field, 'OVER', '') as "after" 

¿Cómo acaba de obtener a todos a decir 'bla' (preservando el caso de lo que queda) sin intentar cubrir todos los casos combinación con otra función SUSTITUIDA anidada?

+0

Gracias, Remus, estaba buscando la etiqueta correcta, pero no había probado esa combinación. – Kev

Respuesta

8

uso de una maleta de colación insensible:

SELECT field as "before", REPLACE(field COLLATE SQL_Latin1_General_Cp1_CI_AI 
, 'OVER', '') as "after" 

Ver COLLATE para la lista de nombres de intercalación por lo que elegir el más apropiado para sus datos.

actualización

Ok, así que no vi a su solicitud real (caso de cambio de entrada, no se encuentra entre mayúsculas y minúsculas). La solución adecuada es ... no cambiar la entrada, sino utilizar una intercalación adecuada para sus datos. Si los datos deben mostrarse en un formato específico, use las opciones de visualización en el cliente, ej. CSS text-transform:uppercase, no en el servidor SELECCIONAR.

No hay ninguna función de SQL incorporada para realizar esta transformación in situ, pero es trivial crear un CLR function que use RegEx. (En SQL 2005, no en SQL 2000 ... doh, necesito más café).

+0

¡Esta sintaxis es nueva para mí! ¡Gracias! – Kev

0

No estoy familiarizado con SQL Server, pero quizás te permite hacer uso de expresiones regulares. Por lo general, ofrecen un modo que no distingue entre mayúsculas y minúsculas (establecido a través de i-flag).

De lo contrario, podría mayúsculas antes de la llamada de reemplazo, p.

SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after" 
+0

Produce 'BLAH-'. Por lo tanto, cambia la cadena de entrada no solo reemplazando 'OVER'. –

+0

Un sitio que encontré sugirió que necesitaba una DLL personalizada instalada para usar expresiones regulares en 2000. Además, eso devuelve todos los 'bla's como en mayúsculas, lo siento, debería haber especificado eso en la pregunta, lo editaré. – Kev

Cuestiones relacionadas