2009-09-23 11 views
5

Ho un campo che contiene stringhe come "Blah-OVER", "Blah-OveR", ecc. E desidero selezionarle senza "over". Questa cattura solo il primo caso (si fa per dire) e non gli altri:REPLACE() senza maiuscole/minuscole in SQL Server 2000

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

Come ho appena ottenere a tutti di dire 'bla' (conservando il caso di ciò che è a sinistra) senza tentare di coprire tutti i casi combinazione con un'altra funzione di SOSTITUZIONE annidata?

+0

Grazie, Remus, stavo cercando il tag giusto ma non avevo provato quella combinazione. – Kev

risposta

8

utilizzare un contenitore per il confronto maiuscole:

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

Vedi COLLATE per la lista dei nomi delle regole di confronto in modo da scegliere quella appropriata per i dati.

Aggiornamento

Ok, così ho perso la richiesta attuale (caso cambiamento di ingresso, non trovano case-insensitive). La soluzione corretta è ... non modificare l'input ma utilizzare una raccolta adeguata per i tuoi dati. Se i dati devono essere visualizzati in un formato specifico, utilizzare le opzioni di visualizzazione nel client, ad es. CSS text-transform:uppercase, non nel server SELECT.

Non esiste alcuna funzione SQL incorporata per eseguire questa trasformazione sul posto, ma è banale creare un CLR function che utilizza RegEx. (Su SQL 2005, non su SQL 2000 ... doh, ho bisogno di più caffè).

+0

Questa sintassi è nuova per me! Grazie! – Kev

0

Non ho dimestichezza con SQL Server, ma forse consente di utilizzare espressioni regolari. Questi di solito offrono una modalità senza distinzione tra maiuscole e minuscole (impostata tramite i-flag).

Altrimenti è possibile scrivere in maiuscolo prima della chiamata di sostituzione, ad es.

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

Produce 'BLAH-'. Quindi cambia la stringa di input non solo sostituendo 'OVER'. –

+0

Un sito che ho trovato mi ha suggerito di aver bisogno di una DLL personalizzata installata per usare le espressioni regolari sul 2000. Inoltre, questo restituisce tutti i 'blah' come maiuscoli - mi spiace, dovrei aver specificato che nella domanda, verrà modificato. – Kev

Problemi correlati