使用SQL在字符串中反转使用混合的从左到右和从右到左的语言?

时间:2015-12-14 13:05:30

标签: sql sql-server sql-server-2008

我的表中有字符串值,包括希伯来字符(或本案例中的任何R-T-L语言)和英语字符(或数字)。

问题是英文字符是颠倒的,看起来像: בדיקה123456 esrever sti fI kcehC。 数字和英文字符相反,希伯来文字很好。

如何使用内置的SQL函数来识别英文子字符串(和数字)并将其反转,同时维护其他RTL字符的顺序?任何解决方法都可以:-) ... 感谢

3 个答案:

答案 0 :(得分:2)

我相信你的整个字符串是颠倒的,希伯来语单词以正确顺序显示的事实实际上是另一个问题的结果。我怀疑希伯来语单词是以非词汇顺序存储的。

理论上,您应该能够通过简单地反转字符串来解决问题,然后强制SQL Server从左到右显示阿拉伯语单词。这是通过在字符串的正面和背面附加一个特殊字符来完成的,如下所示:

    DECLARE @sourceString NVARCHAR(100) = N'123456 בדיקה esrever sti fI kcehC';

    DECLARE @reversedString NVARCHAR(4000)  = nchar(8237) + REVERSE(@sourceString) +  nchar(8236)

    SELECT @reversedString;

答案 1 :(得分:0)

我从未使用过希伯来字符,所以我不确定这是否有效,

但是我认为你可以使用patindex

实现带有while循环的函数
  • 你需要一个变量来保存逆向英语部分@EngTemp
  • 一个变量,用于保存当前正在处理的子字符串@SubTemp
  • 一个变量,用于保存仍需要处理的字符串中的剩余文本@SubNext
  • 一个变量,用于保存当前子字符串@Len
  • 的长度
  • 输出变量@Out

步骤:

  • 取一个字符串输入,将其放入@SubNext 而PatIndex('%[^ a-z]%',@ SubNext)> 0
  • 子串到@SubTemp中的pat索引存储,也将@SubNext修剪为patindex
  • 将@SubTemp的长度存储在@Len
  • if @Len> 1;设置@Out = @Out + @EngTemp + @SubTemp;设置@EngTemp ='' (此步骤假定可能存在英语字符串不是行尾的情况)
  • 如果@Len = 1;设置@EngTemp = @SubTemp + @EngTemp
  • 如果@Len = 0;设置@Out = @Out + @EngTemp (此时循环也应该关闭)

当我有时间和发布实际代码时,我会玩这个,对不起,如果我的涂鸦没有任何意义

答案 2 :(得分:0)

您可以在SQL Server中使用ASCII函数来获取DB中文本字段中字符的ascii值。获得ascii值后,将其与英语可见字符和数字的有效范围进行比较。其他任何东西都可以被视为希伯来字符。

在SQL Server中也会自动存在REVERSE函数,用于根据需要反转字符串。

以下链接有一些示例代码。

http://www.sqlservercurry.com/2009/09/how-to-find-ascii-value-of-each.html