В качестве примера обычного запроса qSQL мы могли бы написать:
select from table where sym like "temp*"
Чтобы выбрать любые элементы в столбце `sym, которые начинаются с «temp*», за которым следует любая последовательность символов.
Как бы мы написали это в функциональной форме? Это чисто задача назначения, которую я выполняю, и мне нужно переписать функцию, используя функциональную форму.
?[trade; enlist(like;`newCol;($:;enlist`ABC)); 0b; ()]
это хорошо работает в блокноте Jupyter KX Academy, однако при этом не учитываются подстановочные знаки.
Мой анализируемый оператор выбора возвращает мне следующее:
?
`table
,,(';(like;`sym);(*;`temp))
0b
()
Однако я не понимаю, как это написать, в Интернете я ничего не нашел. Пожалуйста помоги.
Спасибо. Я должен был знать. Глупая ошибка.
Когда я запускаю оператор:
parse"select from table where sym like \"temp*\""
Я получил:
?
`table
,,(like;`sym;"temp*")
0b
()
что равно:
?[`table;enlist(like;`sym;"temp*");0b;()]
Вы уверены, что правильно разобрали исходный оператор?
Спасибо за помощь, вы были правы, да! ^ выше - ответ, который я искал.
При построении запроса вы можете использовать обратную косую черту, чтобы избежать символов кавычек, чтобы обеспечить анализ вашего запроса:
q)parse "select from table where sym like \"temp*\""
?
`table
,,(like;`sym;"temp*")
0b
()
который будет сформирован в:
?[table;enlist (like;`sym;"temp*");0b;()]
Существует хороший скрипт от kx, который помогает формировать функциональные выборки:
https://code.kx.com/q/wp/parse-trees/#appendix
Огромное спасибо, я чувствую себя немного глупо из-за того, что не знаю, как правильно анализировать строки. Теперь это работает идеально, спасибо.
Ваш проанализированный оператор выбора неверен. Попробуйте выполнить приведенное ниже, чтобы убедиться в этом.
q)parse"select from table where sym like \"temp*\""
Это должно дать вам отправную точку для создания эквивалентного функционального утверждения.