Я храню следующие строки в своей таблице («DataScreen») в столбце JSONB («Результаты»)
{"Id":11,"Product":"Google Chrome","Handle":3091,"Description":"Google Chrome"}
{"Id":111,"Product":"Microsoft Sql","Handle":3092,"Description":"Microsoft Sql"}
{"Id":22,"Product":"Microsoft OneNote","Handle":3093,"Description":"Microsoft OneNote"}
{"Id":222,"Product":"Microsoft OneDrive","Handle":3094,"Description":"Microsoft OneDrive"}
Здесь в этих объектах JSON «Id» и «Handle» являются целочисленными свойствами, а другие — строковыми свойствами.
Когда я запрашиваю свою таблицу, как показано ниже
Select Results->>'Id' From DataScreen
order by Results->>'Id' ASC
Я получаю неправильные результаты, потому что PostgreSql обрабатывает все как текстовый столбец и, следовательно, упорядочивает в соответствии с текстом, а не как целое число. Следовательно, это дает результат как
11,111,22,222
вместо
11,22,111,222.
Я не хочу использовать явное приведение для извлечения, как показано ниже.
Select Results->>'Id' From DataScreen order by CAST(Results->>'Id' AS INT) ASC
потому что я не буду уверен в типе данных столбца из-за того, что структура JSON будет динамической и ключи и значения могут измениться в следующий раз. и, следовательно, может произойти то же самое с другим JSON, имеющим целочисленные и строковые ключи.
Я хочу что-то, чтобы целые числа в структуре Json столбца JSONB обрабатывались только как целые числа, а не как тексты (строки).
Как мне написать свой запрос, чтобы Id и Handle извлекались как целые значения, а не как строки, без явного приведения?