Как создать предложение SoQL where в текстовом столбце, используя операцию ‹=?

Я получаю сообщение об ошибке Unrecognized arguments при попытке применить операцию ‹= к текстовому полю SoQL. Любая помощь очень ценится.

Я пытался применить несколько разных фильтров к этому текстовому полю, но работает только операция =. Когда я пытаюсь использовать любой другой, я получаю сообщение об ошибке «Неопознанные аргументы».

Например: https://data.sfgov.org/resource/bbb8-hzi6.json?start24=10:00 (работает нормально), но https://data.sfgov.org/resource/bbb8-hzi6.json?start24‹=10:00 (сбой)

Согласно документации здесь https://dev.socrata.com/docs/datatypes/text.html#, ‹= оценивает строки, которые в алфавитном порядке предшествуют или равны. Я ожидаю, что эти операции будут работать с текстовыми строками, как указано.


person KRJ    schedule 28.05.2019    source источник
comment
Это не ответ, но я копаюсь в этом и добился определенного прогресса. Для тестирования я использовал отдельный набор данных с четким числовым столбцом. Я обнаружил, что оператор «меньше чем» (<=) плохо работает без оператора $where. То есть https://data.cityofchicago.org/resource/xzkq-xp2w.json?$where=typical_hours%3C=20 работало там, где https://data.cityofchicago.org/resource/xzkq-xp2w.json?typical_hours%3C=20 не работало. Однако это не решает вашу проблему, но заслуживает внимания.   -  person Tom Schenk Jr    schedule 29.05.2019
comment
Я бы порекомендовал вам связаться с [email protected] по этому вопросу. Похоже, что API ведет себя не так, как описано в документации. В том же наборе данных текстовый тип данных (но с более традиционной нумерацией) не работает https://data.sfgov.org/resource/bbb8-hzi6.json?block%3C=4807. Другие перестановки также не работают.   -  person Tom Schenk Jr    schedule 29.05.2019
comment
@TomSchenkJr спасибо, что изучили это. Мой первоначальный URL-адрес действительно включает предложение where, однако оно было довольно сложным, поэтому я упростил его для примера. Я новичок в SoQL, поэтому я подумал, что может быть приведение типов или что-то еще, что я упустил, но я считаю, что вы правы в том, что API просто не ведет себя так, как описано в документации. Спасибо еще раз!   -  person KRJ    schedule 30.05.2019


Ответы (1)


API Socrata использует обычные параметры GET. В вашем примере вы выполняете простую фильтрацию, которая позволяет выполнять точную Матчи.

https://data.sfgov.org/resource/bbb8-hzi6.json?start24=10:00 
  • start24=10:00 имеет параметр GET start24 со значением 10:00

Однако в вашем примере с <=. Это означает нечто совершенно иное в мире URL; это означает:

  • start24<=10:00 имеет параметр GET start24< со значением 10:00.

Поскольку вы не можете использовать какие-либо другие операторы, такие как <=, Socrata использует запросы SoQL, в которых специальные ключевые слова начинаются с $; например $where.

https://data.sfgov.org/resource/bbb8-hzi6.json?$where=start24<="10:00"

Теперь это переводится на:

  • $where=start24<="10:00" имеет параметр GET $where со значением start24<="10:00"

Теперь этот Socrata может обработать и вернуть ваши результаты.

person allejo    schedule 01.06.2019
comment
Вау, это отлично работает! Спасибо за ответ и разъяснение того, как правильно построить предложение where. - person KRJ; 02.06.2019