考虑下面包含波斯语(从右到左语言)和英语(从左到右语言)的查询:
SELECT 'نرم افزار SQL سرور'
所需的结果是这个字符串:
سرورSQLنرمافزار
是否有任何函数或任何其他方法将字符串从ltr转换为rtl ??
答案 0 :(得分:4)
需要在字符串文字之前添加N
:SELECT N'نرم افزار SQL سرور'
。这是正确解释包含的Unicode字符所必需的。 (Source)
重要提示:在某些情况下,请避免使用标准的复制粘贴,以便将SELECT放入SSMS命令窗口。这可以affect the RTL/LTR order。相反,尝试使用文件>打开正确编写的文件打开强>
关于您的评论:
结果应该是:سرورSQLنرمافزار`
我承认我只是部分理解RTL书写系统,但从我所看到的情况来看,波斯语单词会在输入时完全按照顺序输入(即使从右向左阅读)。您能否根据Unicode Bidirectional Algorithm或类似的标准文件向我展示为什么SQL Server应该更改单词顺序?不应该通过预处理在另一个地方进行更改,发送预期的字符串形式SELECT N'سرور SQL نرم افزار'
?我不明白为什么只有SQL SELECT
应该执行更改。 如果确实如此,如果您将此类SELECT
的结果反馈到另一个SELECT
会怎样?另一个转变?我有理由认为SQL服务器在技术上正确地解释了你的输入。
提示:也许您可以尝试用不同的Directional formatting characters包围您的RTL文本。
请在SQL Fiddle处与MySQL服务器尝试相同的SELECT
。不同的服务器和技术,但结果与Microsoft SQL Server相同。
SSMS与MS SQL Server的结果:
结论:为了获得预期的结果,请相应地形成输入。
相关: Transformation of word order you expected can be done by appropriate settings in user interface.
答案 1 :(得分:0)
当我们用英语添加数字时,这将再次不起作用,以下解决方案将起作用
选择nchar(8234)+ N'33-M'+ N'کلینککمرہنمبر'+ nchar(8236)+ N'میںتشریفلائیں'