【发布时间】:2013-09-19 03:20:23
【问题描述】:
SELECT * FROM MarketTable WHERE customer LIKE "ABC"
这仅返回 ABC。我希望它返回 ABC、aBC、abc 等。
在 kDB+ 中是否有接近 ILIKE 的东西?
即使像 lower 或 tolowercase 这样的函数也会有所帮助,但我认为这些函数不可用。就像在 java 中一样,我们有 string.tolowercase。
【问题讨论】:
SELECT * FROM MarketTable WHERE customer LIKE "ABC"
这仅返回 ABC。我希望它返回 ABC、aBC、abc 等。
在 kDB+ 中是否有接近 ILIKE 的东西?
即使像 lower 或 tolowercase 这样的函数也会有所帮助,但我认为这些函数不可用。就像在 java 中一样,我们有 string.tolowercase。
【问题讨论】:
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"
但是,这样转换必须在每个查询中发生。以将要查询的格式更快地存储列。
【讨论】:
下面可能还有另一种方法。这应该更快,但请检查您的数据
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
};
【讨论】: