【问题标题】:KDB+ Case insensitive like queryKDB+ 不区分大小写的查询
【发布时间】:2013-09-19 03:20:23
【问题描述】:
SELECT * FROM MarketTable WHERE customer LIKE "ABC"

这仅返回 ABC。我希望它返回 ABC、aBC、abc 等。

在 kDB+ 中是否有接近 ILIKE 的东西?

即使像 lowertolowercase 这样的函数也会有所帮助,但我认为这些函数不可用。就像在 java 中一样,我们有 string.tolowercase

【问题讨论】:

    标签: java database kdb


    【解决方案1】:
    q)t:([] b:1 2 3; a:("abC";"aBc";"AbC"))
    q)t
    b a
    -------
    1 "abC"
    2 "aBc"
    3 "AbC"
    
    q)select from t where upper[a] like "ABC"
    b a
    -------
    1 "abC"
    2 "aBc"
    3 "AbC"
    
    q)select from t where lower[a] like "abc"
    b a
    -------
    1 "abC"
    2 "aBc"
    3 "AbC"
    

    但是,这样转换必须在每个查询中发生。以将要查询的格式更快地存储列。

    【讨论】:

      【解决方案2】:

      下面可能还有另一种方法。这应该更快,但请检查您的数据

      test: ([] id: (1; 2; 3; 4; 5); customer: ("abc"; "ABC"; "Abc"; "aBC"; "ABB"))
      select from test where raze max customer like/: all_casings["abc"]
      all_casings: {
      fstr: 1#x;
      ans: $[(count[x])>1;(upper[fstr],/: all_casings[1_x]), lower[fstr],/: all_casings[1_x];     ((upper[x]); lower[x])];
      ans
      };
      

      【讨论】:

      • 为什么投反对票?将任何函数应用于较小的输入参数而不是整个数据是否更有意义
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多