2012-04-04 5 views
2

Ich möchte die Zeichen in einem Ntext Feld zählen. Following Pinal Dave's advice, I am using datalength. Aber diese Funktion scheint den Wert zu verdoppeln, nach dem ich suche. Wenn ich den Wert in dem Feld in Wort und kopieren Sie die Zeichen zählt, bekomme ich 1502. Aber wenn ichWarum verdoppelt die satellängenfunktion von sql server die Länge meines Feldes?

tun
select datalength(result) from myTable 

ich einen Wert von 3004 Zeichen erhalten.

Warum?

+0

Unrelated - Vorsicht vor dem Jahr (Eingabedatum). Das kann jetzt keinen Index verwenden. Während das Eingabedatum> = '2012-01-01' und das Eingabedatum <'2013-01-01' würde –

Antwort

7

Unicode ist zwei Bytes pro Zeichen. Ihr NText Feld ist eine Unicode-Zeichenfolge. DataLength() gibt die Anzahl der Bytes zurück, die zum Speichern eines Felds erforderlich sind, Len() gibt die Anzahl der Zeichen zurück.

+0

Wenn Sie die Länge eines Textfelds wissen möchten, stecken Sie Datellänge fest, weil len() nicht funktioniert. Das bedeutet, dass Sie immer die Datenlänge des Zeichens haben müssen (weil Unicode 2 Bytes pro Zeichen ist). – bernie2436

+0

@ akh2103 - Sie müssen einfach das Ergebnis von 'DataLength' durch zwei teilen, um die Anzahl der Zeichen zu erhalten. Sie können durch 'DataLength (N'X ')' als Hinweis/Erinnerung dividieren. – HABO

+0

Und 'Len()' ignoriert nachfolgende Leerzeichen. – StevenWhite

Verwandte Themen