79 Stimmen

Wie konvertiert man mit SQL Server Leerzeichen in Nullwerte?

Ich habe eine Tabelle, deren Spalten für einige Datensätze leere Stellen enthalten. Nun muss ich die Daten in eine andere Tabelle verschieben und die leeren Stellen durch eine NULL Wert.

Ich habe versucht, es zu benutzen:

REPLACE(ltrim(rtrim(col1)),' ',NULL)

aber es funktioniert nicht. Es konvertiert alle Werte von col1 a NULL . Ich möchte nur die Werte, die Leerzeichen enthalten, in NULL .

186voto

geca Punkte 2461

Ich habe ein ähnliches Problem gelöst, indem ich NULLIF Funktion:

UPDATE table 
SET col1 = NULLIF(col1, '')

Aus der T-SQL-Referenz:

NULLIF gibt den ersten Ausdruck zurück, wenn die beiden Ausdrücke nicht gleich sind. Wenn die Ausdrücke gleich sind, gibt NULLIF einen Nullwert vom Typ des ersten Ausdrucks zurück.

60voto

egrunin Punkte 23979

Haben Sie das versucht?

UPDATE table 
SET col1 = NULL 
WHERE col1 = ''

Wie die Kommentatoren anmerken, müssen Sie nicht ltrim() o rtrim() y NULL Spalten werden nicht übereinstimmen '' .

41voto

Bennor McCarthy Punkte 10934

SQL Server ignoriert nachgestellte Leerzeichen beim Vergleich von Zeichenketten, daher ist ' ' = ''. Verwenden Sie einfach die folgende Abfrage für Ihre Aktualisierung

UPDATE table
SET col1 = NULL
WHERE col1 = ''

NULL-Werte in Ihrer Tabelle bleiben NULL, und col1s mit einer beliebigen Anzahl von Zeichen, die nur Leerzeichen enthalten, werden in NULL geändert.

Wenn Sie dies während des Kopierens von einer Tabelle in eine andere tun möchten, verwenden Sie dies:

INSERT INTO newtable ( col1, othercolumn )
SELECT
   NULLIF(col1, ''),
   othercolumn
FROM table

17voto

gls123 Punkte 5207

Dieser Code generiert ein SQL, das dies für jede Tabelle und Spalte in der Datenbank ermöglicht:

SELECT
   'UPDATE ['+T.TABLE_SCHEMA+'].[' + T.TABLE_NAME + '] SET [' + COLUMN_NAME + '] = NULL 
   WHERE [' + COLUMN_NAME + '] = '''''
FROM 
    INFORMATION_SCHEMA.columns C
INNER JOIN
    INFORMATION_SCHEMA.TABLES T ON C.TABLE_NAME=T.TABLE_NAME AND C.TABLE_SCHEMA=T.TABLE_SCHEMA
WHERE 
    DATA_TYPE IN ('char','nchar','varchar','nvarchar')
AND C.IS_NULLABLE='YES'
AND T.TABLE_TYPE='BASE TABLE'

13voto

craigh2 Punkte 121

Bei der Auswahl aus Ihrer Quelltabelle sollte eine Case-Anweisung genügen:

CASE
  WHEN col1 = ' ' THEN NULL
  ELSE col1
END col1

Außerdem ist zu beachten, dass Ihre LTRIM und RTRIM den Wert von einem Leerzeichen (' ') auf ein Leerzeichen ('') reduzieren. Wenn Sie Leerzeichen entfernen müssen, sollte die case-Anweisung entsprechend geändert werden:

CASE
  WHEN LTRIM(RTRIM(col1)) = '' THEN NULL
  ELSE LTRIM(RTRIM(col1))
END col1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X