Ich erstelle T-SQL-SELECT-Anweisungen für Tabellen, für die ich vorher keine Datentypinformationen habe. In diesen Anweisungen muss ich Zeichenfolgenmanipulationsoperationen ausführen, die von der Länge des ursprünglichen Werts der Tabellenspalten abhängen.T-SQL: Wie erhält man die genaue Länge einer Zeichenfolge in Zeichen?
Ein Beispiel (aber nicht die einzige) ist etwas Text in einer bestimmten Position in einem String einzufügen, einschließlich der Option, es am Ende einzufügen:
SELECT
CASE WHEN (LEN ([t0].[Product] = 8)
THEN [t0].[Product] + 'test'
ELSE STUFF ([t0].[Product], 8, 0, 'test')
END
FROM [OrderItem] [t0]
(der Fall, wenn + LEN erforderlich, da STUFF es mir nicht erlaubt, Text am Ende eines Strings einzufügen.)
Das Problem ist, dass LEN nachgestellte Leerzeichen ausschließt, was die Berechnung ruinieren wird. Ich weiß, dass ich DATALENGTH verwenden kann, das nachgestellte Leerzeichen nicht ausschließt, aber ich kann die von DATALENGTH zurückgegebenen Bytes nicht in die von STUFF benötigten Zeichen konvertieren, weil ich nicht weiß, ob die Produktspalte vom Typ varchar oder nvarchar ist.
Also, wie kann ich eine SQL-Anweisung generieren, die von der genauen Länge einer Zeichenfolge in Zeichen ohne vorherige Informationen über den verwendeten Zeichenfolgedatentyp abhängt?
+1 für eine Lösung, die funktioniert! –
+1 Das könnte ein nützlicher Trick sein. –