it-swarm.com.de

Wie finde ich Werte in allen Begrenzungen in SQL Server?

Wie kann ich Spaltenwerte finden, die in allen Großbuchstaben enthalten sind? Wie LastName = 'SMITH' anstelle von 'Smith'

Hier ist was ich versucht habe ...

SELECT *
  FROM MyTable
 WHERE FirstName = UPPER(FirstName)
25
daveomcd

Sie können die Groß-/Kleinschreibung beachten.

select * from T
  where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
47
Alex K.

Versuchen

 SELECT *
  FROM MyTable
 WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS

Diese Sortierung ermöglicht Vergleiche zwischen Groß- und Kleinschreibung.

Wenn Sie die Kollatierung Ihrer Datenbank ändern möchten, sodass Sie in Ihren Abfragen keine Groß-/Kleinschreibung angeben müssen, müssen Sie Folgendes tun ( from MSDN ):

1) Stellen Sie sicher, dass Sie über alle Informationen oder Skripts verfügen, die zum erneuten Erstellen Ihrer Benutzerdatenbanken und aller darin enthaltenen Objekte erforderlich sind.

2) Exportieren Sie alle Ihre Daten mit einem Tool wie dem bcp-Dienstprogramm. 

3) Löschen Sie alle Benutzerdatenbanken.

4) Erstellen Sie die Masterdatenbank neu und geben Sie die neue Kollatierung in der Eigenschaft SQLCOLLATION des Befehls setup an. Zum Beispiel:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName 
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] 
/SQLCOLLATION=CollationName

5) Erstellen Sie alle Datenbanken und alle Objekte darin.

6) Importieren Sie alle Ihre Daten.

7
Joe Ratzer

Sie müssen eine Server-Kollatierung verwenden, bei der die Groß- und Kleinschreibung beachtet wird:

SELECT * 
FROM MyTable
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS
2
Anja

Standardmäßig werden bei SQL-Vergleichen die Groß- und Kleinschreibung nicht berücksichtigt.

1
drdwilcox

Versuchen

SELECT *
  FROM MyTable
 WHERE FirstName = LOWER(FirstName)
0
Despedo

Ich habe eine einfache UDF dafür erstellt:

create function dbo.fnIsStringAllUppercase(@input nvarchar(max)) returns bit

    as

begin

    if (ISNUMERIC(@input) = 0 AND RTRIM(LTRIM(@input)) > '' AND @input = UPPER(@input COLLATE Latin1_General_CS_AS))
        return 1;

    return 0;
end

Dann können Sie es problemlos für jede Spalte in der WHERE-Klausel verwenden.

Um das OP-Beispiel zu verwenden:

SELECT *
FROM   MyTable
WHERE  dbo.fnIsStringAllUppercase(FirstName) = 1
0
isapir

Könnten Sie versuchen, dies als Ihre Where-Klausel zu verwenden?

WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
0
Nonym

Schau mal hier

Anscheinend hast du ein paar Möglichkeiten

  • die Zeichenfolge in VARBINARY (Länge) umwandeln

  • verwenden Sie COLLATE, um eine von Groß- und Kleinschreibung abhängige Kollatierung anzugeben

  • berechnen Sie den BINARY_CHECKSUM () der zu vergleichenden Zeichenfolgen

  • Ändern Sie die COLLATION-Eigenschaft der Tabellenspalte

  • berechnete Spalten verwenden (implizite Berechnung von VARBINARY)

0
Richard Friend
0
hkravitz

Versuche dies

SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS
0
Sequenzia