Sql 为什么相同的postgres查询不适用于两位数?
我正在使用postgres数据库进行我的应用程序 我有以下数据Sql 为什么相同的postgres查询不适用于两位数?,sql,database,postgresql,jsonb,Sql,Database,Postgresql,Jsonb,我正在使用postgres数据库进行我的应用程序 我有以下数据 create table contacts ( id int, contact_data jsonb ); insert into contacts values (1, '{ "tags": [ "MOCK_DATA (4)" ], "
create table contacts (
id int,
contact_data jsonb
);
insert into contacts values
(1, '{
"tags": [
"MOCK_DATA (4)"
],
"Email": "nk3ynman5@marriott.com",
"reach": false,
"Gender": "Male",
"Interest": [
"Dance"
],
"Last Name": "Kynman",
"First Name": "Nicko"
}'),
(2, '{
"ltv": "6",
"City": "Bengaluru",
"Email": "aaa@aa.com",
"State": "Karnataka",
"Country": "India",
"latitude": 12.9715987,
"Last Name": "World",
"longitude": 77.5945627,
"First Name": "Helo"
}'),
(3, '{
"ltv": "11",
"Email": "sf3ortye8@ebay.co.uk",
"reach": false,
"Gender": "Female",
"Country": "United States",
"latitude": "37.09024",
"Last Name": "Fortye",
"longitude": "-95.712891",
"First Name": "Sissie"
}');
我正在尝试获取ltv在2到9之间的id。它创造了一个记录。哪个是正确的
SELECT id from contacts where ( contact_data->> 'ltv' > '2' and contact_data->> 'ltv' < '9' );
+====+
| id |
+====+
| 2 |
+----+
从其中的联系人中选择id(联系人\u数据->>'ltv'>'2'和联系人\u数据->>'ltv'<'9');
+====+
|身份证|
+====+
| 2 |
+----+
问题:
现在我尝试在2到12之间,这应该给出2条记录,但它给出的是0个数据
SELECT id from contacts where ( contact_data->> 'ltv' > '2' and contact_data->> 'ltv' < '12' );
从其中的联系人中选择id(联系人\u数据->>'ltv'>'2'和联系人\u数据->>'ltv'<'12');
谁能告诉我这里有什么问题吗。为什么我得不到价值?这里是看看
ltv的数据类型。它们是字符串而不是数字,因此按字典顺序排列
在查询中强制转换它,以赋予它您希望它具有的含义
编辑:在JSON中使用数字删除,因为从JSON检索数字字段似乎不会给出数字值。查看ltv
的数据类型。它们是字符串而不是数字,因此按字典顺序排列
在查询中强制转换它,以赋予它您希望它具有的含义
编辑:在JSON中使用数字删除,因为从JSON中检索数字字段似乎不会给出数值。在PostgreSQL中->
运算符将返回文本
值。因此,您也在各自的类型中对其进行了转换
请尝试以下查询:
SELECT id
from contacts
where (
(contact_data->> 'ltv')::int > 3 and
(contact_data->> 'ltv')::int < 12
);
选择id
来自联系人
何处(
(联系人数据->>“ltv”)::int>3和
(联系人数据->>“ltv”)::int<12
);
唯一需要注意的是,itv
必须只包含整数值,否则强制转换将抛出错误。在PostgreSQL->
中,运算符将返回一个文本
值。因此,您也在各自的类型中对其进行了转换
请尝试以下查询:
SELECT id
from contacts
where (
(contact_data->> 'ltv')::int > 3 and
(contact_data->> 'ltv')::int < 12
);
选择id
来自联系人
何处(
(联系人数据->>“ltv”)::int>3和
(联系人数据->>“ltv”)::int<12
);
唯一需要注意的是,itv
必须只包含整数值,否则强制转换将抛出错误。我尝试了数字,但仍然没有显示任何数据。您到底尝试了什么?在JSON访问后尝试强制转换,正如此表可能会说,如果从JSON检索内容,您将始终获得text
:因此,在插入时,我将LTV作为数字插入。并尝试在下面查询从联系人中选择id,其中(联系人数据->>'ltv'>2和联系人数据->>'ltv'<12)代码>这现在也可以工作了。您应该像这样尝试从联系人中选择id,其中((联系人数据->>“ltv”)::int>3和(联系人数据->>“ltv”)::int<12)代码>。无论您提供的是值6
还是“6”
。唯一一件事是在ltv
中从不存储非整数值,我尝试了number,但它仍然没有显示任何数据。您到底尝试了什么?在JSON访问之后尝试强制转换,因为此表可能会说,如果您从JSON检索某个内容,您将始终获得text
:因此在插入时,我将ltv插入为number。并尝试在下面查询从联系人中选择id,其中(联系人数据->>'ltv'>2和联系人数据->>'ltv'<12)代码>这现在也可以工作了。您应该像这样尝试从联系人中选择id,其中((联系人数据->>“ltv”)::int>3和(联系人数据->>“ltv”)::int<12)代码>。无论您提供的是值6
还是“6”
。唯一的东西永远不会在ltv