我正在使用從 PostgreSQL 資料庫在 Azure 中的 SMO DW 中創建的資料庫。某些表中有列是陣列。我想取消嵌套這些列以便能夠使用它們,但似乎無法找到一種方法來做到這一點。任何幫助都是理想的?

uj5u.com熱心網友回復:
處理它的一種方法。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (userID INT IDENTITY PRIMARY KEY, users VARCHAR(1000));
INSERT INTO @tbl (users) VALUES
('{"01B334D2-64F9-4A3E-A5C3-D115E7A54A4E"}'),
('{"1BE8F1FC-08F1-4A73-A5FA-8A62AD0A1C47","504D4B75-27D8-42FF-9811-03B18247AE09"}'),
('{"AAD375D3-1244-4EC1-8346-DA783EBE591A"}');
-- DDL and sample data population, end
SELECT userID, users AS [Before]
, QUOTENAME(TRIM('{}' FROM value), '{') AS [After]
FROM @tbl
CROSS APPLY STRING_SPLIT(users, ',');
輸出
-------- ------------------------------------------
| userID | After |
-------- ------------------------------------------
| 1 | {"01B334D2-64F9-4A3E-A5C3-D115E7A54A4E"} |
| 2 | {"1BE8F1FC-08F1-4A73-A5FA-8A62AD0A1C47"} |
| 2 | {"504D4B75-27D8-42FF-9811-03B18247AE09"} |
| 3 | {"AAD375D3-1244-4EC1-8346-DA783EBE591A"} |
-------- ------------------------------------------
uj5u.com熱心網友回復:
這些幾乎看起來像帶有唯一識別符號的 JSON陣列
因此,如果將大括號切換{}為方括號[],則可以使用OPENJSON.
create table Your_Table ( users varchar(100) ); insert into Your_Table (users) values ('{"3F2504E0-4F89-11D3-9A0C-0305E82C3301"}'), ('{"6F9619FF-8B86-D011-B42D-00C04FC964FF","0E984725-C51C-4BF4-9960-E1C80E27ABA0"}')
SELECT TRY_CONVERT(uniqueidentifier, j.value) as user_guid FROM Your_Table CROSS APPLY OPENJSON(TRANSLATE(users,'{}','[]')) j
user_guid 3f2504e0-4f89-11d3-9a0c-0305e82c3301 6f9619ff-8b86-d011-b42d-00c04fc964ff 0e984725-c51c-4bf4-9960-e1c80e27aba0
在這里測驗db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430084.html
