我的表中有字符串值,包括希伯来字符(或本案例中的任何R-T-L语言)和英语字符(或数字)。
问题在于英文字符是颠倒的,看起来像是:בדיקה123456 esrever sti fI kcehC。
数字和英文字符相反,希伯来文字很好。
如何使用内置的SQL函数来识别英文子字符串(和数字)并将其反转,同时维护其他RTL字符的顺序?
我在以下链接中阅读了此问题的答案: Reverse characters in string with mixed Left-to-right and Right-to-left languages using SQL?
解决方案:
DECLARE @sourceString NVARCHAR(100) = N'123456 בדיקה esrever sti fI kcehC';
DECLARE @reversedString NVARCHAR(4000) = nchar(8237) + REVERSE(@sourceString) + nchar(8236)
SELECT @reversedString;
我的问题: 当我尝试使用此选项构建查询时,它不起作用例如:
select count(*) from table where nchar(8237) + REVERSE(column) + nchar(8236) = N'Check If its reverse הקידב 654321'
我该如何解决?
答案 0 :(得分:0)
SQL-Server中RTL字符串的行为,特别是混合时,有时候很奇怪。
我不确切地知道你想要实现什么,但这至少会给你unicode代码点:
DECLARE @source NVARCHAR(100)=N'123456 בדיקה esrever sti fI kcehC';
WITH cte AS
(
SELECT 1 AS pos
,UNICODE(SUBSTRING(@source,1,1)) AS CodeAtPosition
UNION ALL
SELECT cte.pos+1
,UNICODE(SUBSTRING(@source,cte.pos+1,1))
FROM cte
WHERE pos<LEN(@source)
)
SELECT *
FROM cte
希伯来字符来自更高的范围:
pos CodeAtPosition
1 49
2 50
3 51
4 52
5 53
6 54
7 32
8 1489 <-- starting here
9 1491
10 1497
11 1511
12 1492 <-- ending here
13 32
14 101
...more rows
有用的回答:https://stackoverflow.com/a/29821207/5089204
关于双向文本的内容:https://www.w3.org/TR/WCAG20-TECHS/H34.html