c# – 使用LIKE表达式时SQLite中的土耳其语字符

前端之家收集整理的这篇文章主要介绍了c# – 使用LIKE表达式时SQLite中的土耳其语字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. select *from urunler where musteri like %ir%;

测试数据:

  1. +---musteri---+---ID--+
  2. +-------------+-------+
  3. +---İrem------+---1---+
  4. +---Kadir-----+---2---+
  5. +---Demir-----+---3---+

返回结果:

  1. Kadir
  2. Demir

如果使用%rr%然后İrem正在返回,但卡迪尔和Demir没有返回.其他土耳其人的角色也有同样的问题,但没有任何确切的解决方案.我正在编程单声道android.

  1. [sqliteFunction(Name = "TOUPPER",Arguments = 1,FuncType = FunctionType.Scalar)]
  2. public class TOUPPER: sqliteFunction
  3. {
  4. public override object Invoke(object[] args)
  5. {
  6. return args[0].ToString().ToUpper();
  7. }
  8. }
  9.  
  10. [sqliteFunction(Name = "COLLATION_CASE_INSENSITIVE",FuncType = FunctionType.Collation)]
  11. class CollationCaseInsensitive : sqliteFunction {
  12. public override int Compare(string param1,string param2) {
  13. return String.Compare(param1,param2,true);
  14. }
  15. }
  16.  
  17. TOUPPER.RegisterFunction(typeof(TOUPPER));

用这种方式解决了,还单声道c#’使用了库,这里是我需要做的Android.Database.sqlite.sqliteDatabase

解决方法

针对此类问题的一种解决方案是将文本的规范化版本保存到另一列中.在INSERT文本之前,用一些常用字符替换所有特殊字符,并将两个版本放在数据库中.

你的桌子就像那样

  1. ID musteri musteri_normalized
  2. --- ---------- ------------------
  3. 1 İrem Irem
  4. 2 Kadir Kadir
  5. 3 yapılcağ yapilcag

现在,您可以在规范化列上使用LIKE比较,并仍然从数据库返回实际文本.

  1. SELECT musteri FROM table WHERE musteri_normalized LIKE '%ir%';
  2. -> İrem,Kadir

猜你在找的C#相关文章