-1
CREATE TABLE Customer(
id INT PRIMARY KEY,
Name VARCHAR(128) NOT NULL,
Email VARCHAR(128) NOT NULL,
customer_id VARCHAR(16) NOT NULL,
address NVARCHAR(max),
created_time DateTimeOffset NOT NULL default SYSDATETIMEOFFSET()
) 

CREATE UNIQUE INDEX idx_customer_email
ON Customer(customer_id, Email)

INSERT INTO Customer(id, Name, Email, customer_id, address)
VALUES(0,'a','a@gmail.com','a000', '“house_number”: 10, “building_name”: “B0”, “street”: “street0”,
   “city”: “Guwahati”, “state”: “Assam”, “country” : “India”, “Zipcode” : 781017'),
  (1,'b','b@gmail.com','b001', '“house_number”: 11, “building_name”: “B1”, “street”: “street1”,
   “city”: “Patna”, “state”: “Bihar”, “country” : “India”, “Zipcode” : 801101'),
  (2,'c','c@gmail.com','c002', '“house_number”: 12, “building_name”: “B2”, “street”: “street2”,
   “city”: “Raipur”, “state”: “Chhattisgarh”, “country” : “India”, “Zipcode” : 493661'),
  (3,'d','d@gmail.com','d003', NULL),
  (4,'e','e@gmail.com','e004', '“house_number”: 14, “building_name”: “B4”, “street”: “street4”,
   “city”: “Rajkot”, “state”: “Gujrat”, “country” : “India”, “Zipcode” : 360110'),
  (5,'f','f@gmail.com','f005', '“house_number”: 15, “building_name”: “B5”, “street”: “street5”,
   “city”: “Patipat”, “state”: “Haryana”, “country” : “India”, “Zipcode” : 132113'),
  (6,'g','g@gamil.com','g006', '“house_number”: 16, “building_name”: “B6”, “street”: “street6”,
   “city”: “Bangalore”, “state”: “Karnataka”, “country” : “India”, “Zipcode” : 560101'),
  (7,'h','h@gmail.com','h007', '“house_number”: 17, “building_name”: “B7”, “street”: “street7”,
   “city”: “Nagpur”, “state”: “Maharashtra”, “country” : “India”, “Zipcode” : 440001'),
  (8,'i','i@gmail.com','i008', NULL),
  (9,'j','j@gmail.com','j009', '“house_number”: 19, “building_name”: “B9”, “street”: “street9”,
   “city”: “Amritsar”, “state”: “Punjab”, “country” : “India”, “Zipcode” : 143101')

上記のクエリを実行すると、次の表が得られます。 ここに画像の説明を入力

ここで、別の住所テーブルを作成せずに、住所列から州の名前だけを照会したいと考えています。期待される結果は次のようになります。

以下の結果が得られるでしょうか?そうでない場合は、代替手段を提供してください。

4

5 に答える 5

0

ここに画像の説明を入力 してください これはあなたが探しているものですか? この回答は、レイモンドによって提供された回答に基づいています

DECLARE @StateList VARCHAR(8000)

WITH AddressJSON AS
(
SELECT  c.*
,       IIF(c.[address] IS NULL, NULL,  '{ "address": { ' + REPLACE(REPLACE(c.[address], '“', '"'), '”', '"') + ' } }') AS AddressQuotes
FROM    dbo.Customer c
)

SELECT
      @StateList = COALESCE(@StateList + ',', '')  + JSON_VALUE(aj.AddressQuotes, '$.address.state')           
FROM    AddressJSON aj
WHERE   JSON_VALUE(aj.AddressQuotes, '$.address.state') IS NOT NULL;

SELECT @StateList as StateList
于 2020-05-16T16:09:26.933 に答える