Предположим, у вас есть таблица
tbl:([] id:("123"; ""; "invalid"))
И хотите разобрать эту строку на число.
Недопустимые значения. В приведенном выше примере как пустая строка "", так и значение "invalid" должны быть проанализированы до нуля (0Nj).
Как лучше всего это сделать? Мой первоначальный подход был
select id:.[value;;0Nj] each enlist each id from tbl
Но хотя это будет правильно анализировать как «123», так и «недопустимые» записи, он вернет унарный оператор :: вместо null при попытке проанализировать строку с пустой строкой.
Конечно, я мог бы сделать что-то вроде
select id:.[value;;0Nj] each enlist each id from update id:string (count id)#`invalid from tbl where id like ""
но это кажется каким-то... уродливым/неэффективным. Есть ли лучший способ сделать это?
Спасибо
Попробуйте "J"$
бросить столбец
q)select "J"$id from tbl
id
---
123
https://code.kx.com/v2/ref/tok/
Нет проблем - добавлена ссылка на документацию kx
как насчет того, чтобы просто перевести его на длинную длину?
q)update id:"J"$id from `tbl
`tbl
q)select from tbl where not null id
id
---
123
Иисус! Через что я прошел, когда все могло быть так просто. Спасибо, это работает