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

使用SQL使用混合的从左到右和从右到左语言反转字符串中的字符?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的表中有字符串值,其中包括希伯来语字符(或本例中的任何R-T-L语言)和英语字符(或数字) 问题是英文字符颠倒了,看起来像: ביקה123456 esrever sti fI kcehC。 数字和英文字符是颠倒的,希伯来文的就可以了 如何使用内置SQL函数来识别英文子字符串(和数字)并将其反转,同时保持其他RTL字符的顺序?任何解决方法都可以:-)。。。 谢谢我从未使用过希伯来文角色,所以我不确定这是否有效 但是,我认为可以使用patindex实现带有while循环的函数 您需要一个变量来

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

问题是英文字符颠倒了,看起来像: ביקה
123456 esrever sti fI kcehC
。 数字和英文字符是颠倒的,希伯来文的就可以了

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

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

但是,我认为可以使用patindex实现带有while循环的函数

  • 您需要一个变量来保存反向的英语部分@EngTemp
  • 用于保存当前正在处理的子字符串@SubTemp的变量
  • 一个变量,用于保存字符串中仍需在@subtext处处理的剩余文本
  • 用于保存当前子字符串@Len长度的变量
  • 输出变量@Out
步骤:

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

当我有时间的时候,我会玩这个,并发布实际的代码,如果我的涂鸦没有任何意义,很抱歉,我相信你的整个字符串是颠倒的,希伯来语单词以正确的顺序显示的事实实际上是另一个问题的结果。我怀疑的是希伯来语单词是以非词汇顺序存储的

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

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

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

    SELECT @reversedString;

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

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

下面的链接有一些示例代码


这里公认的答案可能对您有所帮助:这仅限于英语吗?如果法语、瑞典语甚至德语文本中使用Eszett字符代替双s怎么办?