項目中,有時候會將某個字符串類型的字段定義為JSON格式。
如果要查詢其某個字段包含了某值,則通常用關鍵字 LIKE '%"IsCheckedTemporary":true%'
如果要查詢其某個字段包含了某值,則通常用關鍵字 LIKE '%"IsCheckedTemporary":true%'
SQL SERVER2016版本開始,有了對JSON操縱的內置函數。具體見官方連接:
https://docs.microsoft.com/zh-cn/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15
茲舉例如下:
一、如果字段內容是這樣的JSON格式:
[{"userid":"10001","username":"戊土","level":"5"},{"userid":"10002","username":"丙火","level":"2"}]
一、如果字段內容是這樣的JSON格式:
[{"userid":"10001","username":"戊土","level":"5"},{"userid":"10002","username":"丙火","level":"2"}]
則sql語句:
SELECT *,UserInfo.username FROM dbo.包含JSON字段的表名 CROSS APPLY OPENJSON (包含JSON字段的表名.字段)
WITH (
userid INT N'$.userid',
username NVARCHAR (200) N'$.username',
level INT N'$.level'
) AS UserInfo
WHERE UserInfo.userid='10001'
WITH (
userid INT N'$.userid',
username NVARCHAR (200) N'$.username',
level INT N'$.level'
) AS UserInfo
WHERE UserInfo.userid='10001'
二、如果字段內容是這樣的JSON格式:
{"province":[{"pname":"廣東"},{"pname":"廣西"}],"city":[{"cname":"上海市"},{"cname":"杭州市"}]}
{"province":[{"pname":"廣東"},{"pname":"廣西"}],"city":[{"cname":"上海市"},{"cname":"杭州市"}]}
則sql語句:
SELECT *,Province.pname,City.cname FROM dbo.包含JSON字段的表名
CROSS APPLY OPENJSON (包含JSON字段的表名.字段,N'$.prov')
WITH (pname nvarchar(max) N'$.pname') AS Province
CROSS APPLY OPENJSON (包含JSON字段的表名.字段,N'$.city')
WITH (cname nvarchar(max) N'$.cname') AS City
CROSS APPLY OPENJSON (包含JSON字段的表名.字段,N'$.prov')
WITH (pname nvarchar(max) N'$.pname') AS Province
CROSS APPLY OPENJSON (包含JSON字段的表名.字段,N'$.city')
WITH (cname nvarchar(max) N'$.cname') AS City
WHERE Province.pname='廣東' AND City.cname='上海市'