2015-06-16 14 views
7

Betrachten Sie unter Abfrage beide Persisch (ein von rechts nach links Sprache) und Englisch (von links nach rechts Sprache) enthält:rechts nach links Zeichenfolge in SQL Server

SELECT 'نرم افزار SQL سرور' 

das gewünschte Ergebnis ist diese Zeichenfolge:

سرور SQL نرم اززار

Gibt es irgendeine Funktion oder einen anderen Weg, um eine Zeichenkette von ltr in rtl umzuwandeln?

Antwort

4

Vor dem Zeichenfolgenliteral muss N hinzugefügt werden: SELECT N'نرم افزار SQL سرور'. Dies ist erforderlich, um enthaltene Unicode-Zeichen korrekt zu interpretieren. (Source)

Wichtig: In einigen Fällen vermeiden Sie bitte Standard Copy-Paste, um SELECT in SSMS Befehlsfenster zu setzen. Dies könnte affect the RTL/LTR order. Versuchen Sie stattdessen, die korrekt erstellte Datei unter Verwendung von Datei> Öffnen zu öffnen.

Und in Bezug auf Ihren Kommentar:

das Ergebnis sein sollte: سرور SQL نرم افزار`

Ich gebe zu, ich RTL Schrift verstehe nur teilweise, sondern von dem, was ich sehen kann, Persische Wörter werden an die Ausgabe genau in Reihenfolge gebracht, wie Sie sie eingegeben haben (auch wenn Sie von rechts nach links lesen). Können Sie mir basierend auf Unicode Bidirectional Algorithm oder ähnlichen Standards Dokument zeigen, warum die Reihenfolge der Wörter von SQL Server geändert werden sollte? Sollte keine Änderung erwartet werden, die durch Vorverarbeitung an einem anderen Ort gemacht wird, indem die erwartete Zeichenkette SELECT N'سرور SQL نرم افزار' gesendet wird? Ich sehe keinen Grund, warum nur SQL SELECT die Änderung durchführen sollte. Wenn ja, was würde passieren, wenn Sie das Ergebnis eines solchen SELECT in ein anderes SELECT einspeisen? Eine weitere Transformation? Ich habe Grund zu der Annahme, dass SQL Server Ihre Eingaben technisch korrekt interpretiert.

Hinweis: Vielleicht können Sie versuchen, Ihren RTL-Text durch verschiedene Directional formatting characters zu umgeben.

Bitte versuchen Sie das gleiche SELECT mit MySQL-Server unter SQL Fiddle. Unterschiedlicher Server und Technologie, aber das gleiche Ergebnis wie Microsoft SQL Server.

Ergebnis aus SSMS mit MS SQL Server: enter image description here

Fazit: um erwartetes Ergebnis zu erhalten, benutzen Sie bitte entsprechend den Eingang bilden.

Verwandte:Transformation of word order you expected can be done by appropriate settings in user interface.

+0

@Behnam - Antwort aktualisiert. Bitte sehen Sie das Bild mit den Ergebnissen. Ich sehe, dass in beiden Fällen (A, B) die Ausgabe immer genau der Eingabe entspricht. Und das ist richtig. Erhalten Sie unterschiedliche Ergebnisse? Wenn ja, bitte aktualisieren Sie die Frage entsprechend. – miroxlav

+0

sind wir jetzt einen Schritt näher. Dieses Ergebnis ist korrekt. aber ich will Ergebnis B für Anweisung A und Ergebnis A für Anweisung B. – Behnam

+0

@Behnam - Ich verstehe, aber Sie können nicht erwarten * Ergebnis B für Anweisung A * und * Ergebnis A für Anweisung B *. Dies ist nicht wie SQL Server funktioniert.Die entsprechende Ausgabe wird für die Eingabe angegeben, keine Transformationen. Wie Sie sehen, gilt dies nicht nur für Microsoft SQL Server, sondern auch für andere SQL-Server - versuchen Sie, den Link "SQL Fiddle" in der Antwort zu klicken, um mit dem MySQL-Server zu testen. – miroxlav

Verwandte Themen