国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Postgresql JSON對象和數(shù)組查詢

這篇具有很好參考價值的文章主要介紹了Postgresql JSON對象和數(shù)組查詢。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一. Postgresql 9.5以下版本

1.1 簡單查詢(缺陷:數(shù)組必須指定下標(biāo),不推薦)

1.1.1 模糊查詢
SELECT  * FROM "public"."tf_low_data_testUser" WHERE  "address" #>> '{0,name}' like '%bb%'

address字段是JSONArray類型,所以在路徑中,使用數(shù)字索引來訪問數(shù)組元素,從 0 開始計數(shù)。

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.1.2 等值匹配
SELECT  * FROM "public"."tf_low_data_testUser" WHERE "address" #>> '{0,name}' = 'bbb'

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢
如果字段是int類型,后面需要添加::int
Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.1.3 時間搜索
SELECT  * FROM "public"."tf_low_data_testUser" WHERE  "address" #>> '{0,date}' BETWEEN '2023-08-13' AND '2023-08-17'

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.1.4 在列表
SELECT  * FROM "public"."tf_low_data_testUser" WHERE  "address" #>> '{0,name}' IN ('bbb','ccc')

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.1.5 包含
SELECT  * FROM "public"."tf_low_data_testUser" WHERE "address" #> '{0,roles,0,roleUsers}' @> '["eee"]'
  • #>:獲取在指定路徑的 JSON 對象,路徑不存在則返回空。返回類型是json(b)
  • #>>:獲取在指定路徑的 JSON 對象,路徑不存在則返回空。返回類型是text

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2 多層級JSONArray(推薦)

如果表中有一個字段posts,數(shù)據(jù)結(jié)構(gòu)為

[{
	"name": "aaa",
	"ports": [{
		"port": 443,
		"nickname": "ggg",
		"date": "2023-08-29",
		"address": ["111", "222"]
	}, {
		"port": 80,
		"nickname": "fff",
		"date": "2022-08-29",
		"address": ["333", "444"]
	}]
}, {
	"name": "bbb",
	"ports": [{
		"port": 2443,
		"nickname": "hhh",
		"date": "2021-08-29",
		"address": ["999"]
	}, {
		"port": 280,
		"nickname": "jjj",
		"date": "2020-08-29",
		"address": ["111111"]
	}]
}]
1.2.1 模糊查詢

查詢nickname like '%jj%'

可以看出有兩層JSONArray結(jié)構(gòu)

SELECT * FROM "public"."tf_low_data_testUser" WHERE EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->>'nickname') like '%gg%'
);

當(dāng)該層級類型是數(shù)組就添加CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.2 模糊查詢 NOT
SELECT * FROM "public"."tf_low_data_testUser" WHERE NOT EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->>'nickname') like '%gg%'
);

查的是另外三條數(shù)據(jù)源
Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.3 等值匹配
SELECT * FROM "public"."tf_low_data_testUser" WHERE EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->>'port')::int = 80
);

如果是數(shù)字類型后面需要轉(zhuǎn)換 ::int,因為 ->> 操作符的返回類型是 text

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.4 等值匹配 NOT
SELECT * FROM "public"."tf_low_data_testUser" WHERE NOT EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->>'port')::int = 80
);

查的是另外三條數(shù)據(jù)源
Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.5 時間搜索
SELECT * FROM "public"."tf_low_data_testUser" WHERE EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->>'date') BETWEEN '2022-08-13' AND '2023-08-17'
);

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.6 時間搜索 NOT

查的是另外三條數(shù)據(jù)源
Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.7 在列表
SELECT * FROM "public"."tf_low_data_testUser" WHERE EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->>'nickname') IN ('ggg','fff')
);

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.8 在列表 NOT

查的是另外三條數(shù)據(jù)源
Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.9 包含
SELECT * FROM "public"."tf_low_data_testUser" WHERE EXISTS (
  SELECT 1
  FROM jsonb_array_elements("ports") as arr1(obj1) 
	CROSS JOIN jsonb_array_elements(obj1->'ports') as arr2(obj2)
  WHERE (obj2->'address') @> '["444"]'
);

此時使用的操作符是->,返回值是jsonb類型

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

1.2.10 包含 NOT

查的是另外三條數(shù)據(jù)源
Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

二. Postgresql 9.5和以上版本

也兼容上面的JSON查詢

2.1 模糊查詢

使用函數(shù)jsonb_path_exists(可以指定JSON路徑,如果是數(shù)組添加[*])的正則查詢達(dá)到模糊查詢的效果

-- like '%ggg%'
SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].nickname ?(@ like_regex "g")')
-- 左模糊 like '%g'
SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].nickname ?(@ like_regex "g$")')
-- 右模糊 like 'g%'
SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].nickname ?(@ like_regex "^g")')
-- 等值匹配
SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].nickname ?(@ like_regex "^ggg$")')

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

同樣支持NOT文章來源地址http://www.zghlxwxcb.cn/news/detail-691080.html

2.2 等值匹配

SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].nickname ?(@ == "fff")')

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

同樣支持NOT

2.3 時間搜索

SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].date ?(@ >= "2022-01-02" && @ <= "2023-08-02")')

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

同樣支持NOT

2.4 在列表

SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].nickname ?(@ == "ggg" || @ == "fff")')

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

同樣支持NOT

2.5 包含

等值匹配一樣

SELECT * FROM "public"."tf_low_data_testUser" WHERE jsonb_path_exists("ports", '$[*].ports[*].address ?(@ == "222")')

Postgresql JSON對象和數(shù)組查詢,Postgresql,JSON查詢

同樣支持NOT

到了這里,關(guān)于Postgresql JSON對象和數(shù)組查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python中如何快速解析JSON對象數(shù)組

    由于瀏覽器可以迅速地解析JSON對象,它們有助于在客戶端和服務(wù)器之間傳輸數(shù)據(jù)。本文將描述如何使用Python的JSON模塊來傳輸和接收J(rèn)SON數(shù)據(jù)。 JSON (JavaScript Object Notation)是一種用于數(shù)據(jù)交換的語法,它對人的讀寫很簡單,對計算機的解析和生產(chǎn)也很簡單,而且還可以存儲數(shù)據(jù)。

    2024年02月10日
    瀏覽(19)
  • PostgreSQL-視圖-03-查詢對象依賴關(guān)系視圖-dba_dependencies

    PostgreSQL查詢對象依賴關(guān)系視圖

    2024年02月15日
    瀏覽(26)
  • 如何將JSON字符串?dāng)?shù)組轉(zhuǎn)對象集合

    1、、、引入jar 包 2、Java對象轉(zhuǎn)成JSON格式 3、JSON格式字符串轉(zhuǎn)換成Java對象 3.1、直接將JSON字符串轉(zhuǎn)換成Java對象 3.2、先將JSON字符串轉(zhuǎn)換成JSON對象,再轉(zhuǎn)換成Java對象 3.3、如果JSON字符串是一個JSON數(shù)組,并且數(shù)組里面存放的同一種類型的對象,可以將這個JSON數(shù)組轉(zhuǎn)換成Java的Li

    2024年02月02日
    瀏覽(20)
  • javascript中json 對象 數(shù)組之間相互轉(zhuǎn)化的示例

    在JavaScript中,你可以使用 JSON.stringify() 將JSON對象轉(zhuǎn)換為JSON字符串,使用 JSON.parse() 將JSON字符串轉(zhuǎn)換為JSON對象。而要將JSON對象轉(zhuǎn)換為數(shù)組,可以使用 Object.values() 方法,而要將數(shù)組轉(zhuǎn)換為JSON對象,可以使用 Array.reduce() 方法。下面是這些轉(zhuǎn)換的示例代碼: 將JSON對象轉(zhuǎn)換為J

    2024年02月16日
    瀏覽(27)
  • 如何修改JSON數(shù)組中的每個對象的userType屬性值

    要修改JSON數(shù)組中的每個對象的`userType`屬性值,您可以使用JavaScript的`map`函數(shù)或`forEach`循環(huán)。 以下是使用`map`函數(shù)的示例: ```javascript ``` 在上述示例中,我們使用`map`函數(shù)遍歷原始數(shù)據(jù)數(shù)組,對于每個對象,我們檢查是否存在`userType`屬性,然后將其值修改為新值(在這里將其

    2024年02月10日
    瀏覽(28)
  • mysql 5.7 json 類型 json 數(shù)組類型 普通字符串類型 10w數(shù)據(jù) 查詢速度差異

    mysql 5.7 json 類型 json 數(shù)組類型 普通字符串類型 10w數(shù)據(jù) 查詢速度差異

    建表語句ddl 10w 數(shù)據(jù) 插入 存儲過程 ?json 類型 vs 普通字符串類型 建表語句ddl CREATE TABLE tb_json_array_test ( id INT NOT NULL AUTO_INCREMENT, user_no VARCHAR(100), user_name VARCHAR(100), score INT, create_time date, update_time date, remark VARCHAR(100), field1 VARCHAR(100), field2 VARCHAR(100), field3 VARCHAR(100), field4 VARCHAR(

    2024年02月04日
    瀏覽(25)
  • JSON對象字符串在C#中進(jìn)行像sql一樣動態(tài)查詢

    在C#中,我們可以使用多種方法來根據(jù)條件動態(tài)查詢JSON對象字符串?dāng)?shù)據(jù),類似于SQL語句查詢。 使用JObject JObject是Json.NET中的一個類,可以方便地操作JSON對象。通過JObject,我們可以像使用SQL一樣使用LINQ查詢語句來查詢JSON對象。 示例代碼: 使用JsonPath JsonPath是一種基于JSON對象

    2023年04月14日
    瀏覽(23)
  • PostgreSQL JSON 類型詳解

    JSON 代表 JavaScript Object Notation。它是一種開放標(biāo)準(zhǔn)格式,將數(shù)據(jù)組織成 RFC 7159 中詳述的鍵/值對和數(shù)組 使用 JSON 格式存儲數(shù)據(jù)的主要原因之一是架構(gòu)靈活性。當(dāng)架構(gòu)不穩(wěn)定且頻繁更改時,將數(shù)據(jù)存儲在 JSON 中非常有用。如果將每個鍵存儲為列,則會導(dǎo)致頻繁的 DML 操作 - 當(dāng)您的

    2024年02月11日
    瀏覽(27)
  • postgresql json數(shù)據(jù)操作

    pg支持json數(shù)據(jù)操作,2種類型json jsonb postgresql json jsonb 2種數(shù)據(jù)類型區(qū)別 中文解釋 PostgreSQL提供了兩種數(shù)據(jù)類型來存儲JSON數(shù)據(jù): JSON 和 JSONB 。下面是它們之間的區(qū)別: JSON: JSON 數(shù)據(jù)類型在PostgreSQL中將JSON數(shù)據(jù)按原樣存儲,不進(jìn)行額外的處理。它會驗證JSON語法,但不強制執(zhí)行任

    2024年02月15日
    瀏覽(17)
  • 簡述PostgreSQL中json數(shù)據(jù)類型

    ? ? ? ? JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript(European Computer Manufacturers Association, 歐洲計算機協(xié)會制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語

    2024年02月06日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包