Если вы ищете классическое сравнение строк, независимо от того, является ли строка числовой или нет, я бы предложил следующий подход:
a.Создайте методы, которые ведут себя подобно обычным компараторам Java.Который возвращает 0
, если строки равны, -1
, если первая строка меньше второй, и 1
, если первая больше второй
.utils.compare: {$[x~y;0;$[x~first asc (x;y);-1;1]]};
.utils.less: {-1=.utils.compare[x;y]};
.utils.lessOrEq: {0>=.utils.compare[x;y]};
.utils.greater: {1=.utils.compare[x;y]};
.utils.greaterOrEq: {0<=.utils.compare[x;y]};
b.Используйте их в предложении where
bb:([]key1: 0 1 2 1 7;
col1: 1 2 3 4 5;
col2: 5 4 3 2 1;
col3:("11";"22" ;"33" ;"44"; "55"));
select from bb where .utils.greaterOrEq["33"]'[col3]
c.Как вы видите ниже, это работает для произвольных строк
cc:([]key1: 0 1 2 1 7;
col1: 1 2 3 4 5;
col2: 5 4 3 2 1;
col3:("abc" ;"def" ;"tyu"; "55poi"; "gab"));
select from cc where .utils.greaterOrEq["ffff"]'[col3]
.utils.compare
также может быть записано в векторной форме, хотя я не уверен, будет ли это более эффективным по времени / памяти
.utils.compareVector: {
?[x~'y;0;?[x~'first each asc each(enlist each x),'enlist each y;-1;1]]
};