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

right to left string in SQL server

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

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

要求的结果是这个字符串:

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

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

需要在字符串文字前添加NSELECT N'نرم افزار SQL سرور'。这是正确解释包含的 Unicode 字符所必需的。 (Source)

重要提示:在某些情况下,请避免使用标准复制粘贴将 SELECT 放入 SSMS 命令 window 中。这可能 affect the RTL/LTR order。相反,请尝试使用 File > Open.

打开正确组合的文件

并且关于您的评论

the result should be : سرور SQL نرم افزار`

我承认我只部分理解 RTL 书写系统,但据我所知,波斯语单词 完全按照您输入的顺序输出 (即使阅读右到左)。你能根据 Unicode Bidirectional Algorithm 或类似的标准文档告诉我为什么 SQL 服务器应该更改词序吗?不应该是您期望通过在另一个地方进行预处理,发送预期的字符串形式 SELECT N'سرور SQL نرم افزار' 所做的更改吗?我看不出为什么 SQL SELECT 应该执行更改。 如果是这样,如果将这样一个 SELECT 的结果输入另一个 SELECT 会发生什么?另一个转换? 我有理由认为 SQL 服务器在技术上正确地解释了您的输入。

提示:也许您可以尝试用不同的 Directional formatting characters.

包围您的 RTL 文本

请使用位于 SQL Fiddle 的 MySQL 服务器尝试相同的 SELECT。不同的服务器和技术,但与 Microsoft SQL 服务器给出的结果相同。

SSMS 与 MS SQL 服务器的结果:

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

相关:

当我们用英文添加数字时,这将再次不起作用,下面的解决方案将起作用

SELECT nchar(8234)+ N'33-M' + N'诊室号' +nchar(8236) + N'就诊'