Удалить запись в таблице столбцов KDB с соответствием регулярному выражению? - PullRequest
0 голосов
/ 07 июня 2019

Как я могу удалить строку в таблице KDB, соответствующую определенному регулярному выражению?

Например:

Исходная таблица

index | value  | number
  0   |  a_fo  |  999
  1   |  b_fo  |  999
  2   |  c_fo  |  999
  3   |  c_ba  |  999

Запрос должен удалить все записи в столбце value, которые соответствуют регулярному выражению c_*, где значение начинается с c_, а затем - любой длины символов.

Таблица результатов

index | value  | number
  0   |  a_fo  |  999
  1   |  b_fo  |  999

Ответы [ 2 ]

3 голосов
/ 07 июня 2019

В качестве альтернативы вы можете индексировать, чтобы избежать использования шаблона удаления для чего-то более быстрого

t where not t[`value] like "c*"

Или используйте функцию удаления

![t;enlist(like;`value;"c_*");0b;`$()]

Что касается именования значения столбца, которое является зарезервированным ключевым словом в q, вы можете использовать .Q.id, который будет переименовывать переменные с плохим именем, чтобы избежать любых проблем, например:

.Q.id t
results in the columns `index`value1`number
2 голосов
/ 07 июня 2019

Во-первых, я бы не назвал столбец как значение. Это приведет к ошибкам.

index val  number
-----------------
0     a_fo 999
1     b_fo 999
2     c_fo 999
3     c_ba 999

Использование delete должно сделать i

t:delete from t where val like "c_*"

Вам нужно переопределить t, если вы хотите, чтобы таблица обновлялась.

...