SQL服务器中从右到左的字符串

时间:2015-06-16 05:48:59

标签: sql sql-server-2008-r2

考虑下面包含波斯语(从右到左语言)和英语(从左到右语言)的查询:

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

所需的结果是这个字符串:

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

是否有任何函数或任何其他方法将字符串从ltr转换为rtl ??

2 个答案:

答案 0 :(得分:4)

需要在字符串文字之前添加NSELECT 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的结果: enter image description here

结论:为了获得预期的结果,请相应地形成输入。

相关: 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'میںتشریفلائیں'