Mysql:混合写作方向/得到第一个字符的情况下

时间:2015-11-19 16:23:18

标签: mysql utf-8 arabic

我的MySQL-Table包含混合字母和书写方向的内容。我想获得每行字母顺序的第一个字母。

Enumerable.Range(start, end - start)

结果:

SELECT 
    term,
    left(term, 1)
FROM
    terms

正如你所看到的那样,无论是阿拉伯语还是拉丁语 left 都是正确的第一个字母,这是最左边的,或者在阿拉伯语的情况下,最正确的一个。在混合术语的情况下,它优先考虑拉丁语部分并从左到右阅读,而我想要相反并获得最正确的角色。 (我不能tka最正确的角色,因为在纯阿拉伯语和纯拉丁语中我会得到最后一个角色)。

因此预期结果应为

'H مشبك ملتوي ذو شكل', 'H'
'م'       , 'مكعّب فسيفساء'
'H Word',              'H'

我认为可能有一个技巧可以解决这个问题,但也许有些人之前遇到过这个问题而且知道一些问题:)

任何想法?提前谢谢!

编辑:创建如下的测试数据:

'H مشبك ملتوي ذو شكل'
-> 'م'
'م'       , 'مكعّب فسيفساء'
'H Word',              'H'

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作。如果最后一个字符不是拉丁字符,那么它会带来阿拉伯语的第一个字符(最后一个),否则它会带来拉丁语的第一个字符(第一个字符)。但请注意,如果最后一个字符是数字字符,则必须检查记录。

SQL Fiddle

SELECT term, IF(TRIM(term) NOT RLIKE '[A-Z]$', RIGHT(TRIM(term), 1), LEFT(TRIM(term), 1)) AS first_char
FROM terms;

答案 1 :(得分:0)

您撰写的查询与我合作private class ButtonHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if(checkboxcheck1 == 1) { textFieldSum.setText(String.valueOf(counter)); } else if (checkboxcheck2 == 1) { textFieldSum1.setText(String.valueOf(counter1)); } else if (checkboxcheck1 == 1 && checkboxcheck2 == 1) { //do something } else { checkboxcheck1 = 0; } } 你没有问题 我所期望的插入数据的问题, 我的意思是: 您的文字left (term, 1)在开头已经有'H مشبك ملتوي ذو شكل'字符。 但是你想要的正确字符串必须是这样的:H