2008-09-22 5 views
6

Um eine Suche nach Groß- und Kleinschreibung in einer Tabelle in einer SQL Server 2000/2005-Datenbank durchzuführen, müssen Sie die korrekte Sortierung verwenden.Wie führe ich in SQL 2000/2005 eine Suche nach Groß- und Kleinschreibung durch?

Wie ermitteln Sie, ob bei der Standardsortierung für eine Datenbank die Groß-/Kleinschreibung beachtet wird, und wenn dies nicht der Fall ist, wie wird die Suche/Ersetzung von Groß- und Kleinschreibung unterschieden?

Antwort

12
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' 

Sie die Standardsortierung nicht davon ausgehen, Groß- und Kleinschreibung sein, nur jedes Mal einem Groß- und Kleinschreibung eines angeben (die richtigen für Ihre Sprache natürlich mit)

8

fest, ob die Standardsortierung ist Fall- empfindlich wie folgt aus:

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

ein Ergebnis von 0 bedeutet, dass Sie in Groß- und Kleinschreibung Sortierungsmodus sind, 8 gibt es Groß- und Kleinschreibung ist.

Wenn bei der Sortierung die Groß-/Kleinschreibung nicht beachtet wird, müssen Sie den Sortiermodus, den Sie beim Suchen/Ersetzen verwenden möchten, explizit deklarieren.

Hier ist, wie eine Update-Anweisung zu konstruieren, Groß- und Kleinschreibung durchführen zu suchen/ersetzen, indem Sie den Sortierungsmodus Angabe zu verwenden:

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

Dies wird passen und ersetzen 'THECONTENT', aber nicht 'TheContent' oder 'thecontent'.

+0

Dies ist die richtige Antwort. –

0

Auch dies könnte nützlich sein. Wählen Sie * aus fn_helpcollations() - dies wird alle Kollatierungen erhalten, die Ihr Server unterstützt. Wählen Sie * aus sys.databases - hier gibt es eine Spalte, die angibt, welche Kollatierung jede Datenbank auf Ihrem Server hat.

0

Sie können die Sortierung bei jeder Abfrage der Tabelle entweder angeben oder Sie können die Sortierung dauerhaft auf die Spalte (n) anwenden, indem Sie die Tabelle ändern.

Wenn Sie sich für die Abfragemethode entscheiden, ist es auch vorteilhaft, die Suchargumente ohne Berücksichtigung der Groß- und Kleinschreibung einzubeziehen. Sie werden sehen, dass SQL einen effizienteren Exec-Plan auswählt, wenn Sie sie einschließen. Zum Beispiel:

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

Kann in mehreren Anweisungen durchgeführt werden. funktioniert nicht funktioniert, wenn Sie lange Zeichenfolgen haben, die sowohl Großbuchstaben Wörter enthalten, die Sie ersetzen möchten. Sie müssen möglicherweise auch eine andere Sortierung verwenden, dies ist Akzent und Groß- und Kleinschreibung.

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] 
2

Wenn Sie verschiedene Fälle des gleichen Wortes im gleichen Feld, und will nur ersetzen bestimmte Fälle, dann können Sie in Ihrem Betrieb REPLACE Funktion:

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' 
    ) 

Dies führt zu:

This is camelCase 1 and this is CamelCase 2 

wird:

This is changedWord 1 and this is ChangedWord 2 
Verwandte Themen