2016-05-23 2 views
2
create tabel test(json jsonb); 
insert into test values('{"graductionDate": "Jun 1 2015 12:00AM"}') 
insert into test values('{"graductionDate": "Jun 1 2016 12:00AM"}') 

результат запроса неверен:как запросить дату в json?

select * from test where json>'{"graductionDate":"20151001 00:00"}' 

Я хочу, чтобы получить данные с graductionDate после 20150101. Но приведенный выше код получает все строки.

+0

Не могли бы вы дать результат, которого вы ожидали, и результат, который вы получили? –

+0

Я хочу получить данные после 20150101. Но использовать «select * from test where json> '{" graductionDate ":" 20151001 00:00 "}'" получить все данные – peanutshell

+0

Прохладный. Я отредактировал это в вашем вопросе для будущих читателей. –

ответ

1

http://www.postgresql.org/docs/current/static/functions-json.html

Не использовав JSON объектов, прежде чем я догадаться вам нужно извлечь поле даты из объекта, рассматривать его в качестве даты, а затем сравнить его на другую дату.

select * 
    from test 
where ((json->>'graductionDate')::timestamp) > ('20151001 00:00':: timestamp); 

Я нету тестировал этот код.


Редактировать

Ваш комментарий звучит как ->> оператор лечит null как пустая строка ''. Вы можете конвертировать '' в null с помощью функции nullif():

select * 
    from test 
where (nullif(json->>'graductionDate', '')::timestamp) > ('20151001 00:00':: timestamp); 

Этот код еще не тестировалась.

+0

код не работает. 'ERROR: не может использовать тип jsonb для временной метки без часового пояса LINE 3: где ((json -> 'graductionDate') :: timestamp)> '20151001 00: 0 ... ' – Jasen

+0

hmm. угадать, что нужно '- >>' вместо '->' –

+0

да, это исправлено, – Jasen

Смежные вопросы