Как вы отображаете конкретную фразу, которую вы ищете, из строки в POSTGRESQL

#json #postgresql

Вопрос:

Вот пример значения строки

 CREATION_DATE: 2021-08-30
USER_EMAIL: 'jack@sample.com
ACTION: 'FileAccessedExtended'
AUDITDATA: 
{
   "OrganizationId":"orgid1231231",
   "RecordType":6,
   "UserKey":"i:0h.f|membership|10032000de9e9feb@live.com",
   "UserType":0,
   "Version":1,
   "Workload":"SharePoint",
   "ClientIP":"11.11.11.11",
   "ObjectId":"https://someorganization.sharepoint.com/sites/MondayMeetings862/Shared Documents/folder/folders/somefolder/Contact Database/Investment Contact Database (MASTER) 1.xlsx",
   "UserId":"jack@sample.com",
   "CorrelationId":"12-031-23809123809172309",
   "EventSource":"SharePoint",
   "ItemType":"File",
   "ListId":"334b5378-2a4c-4ba6-b1ac-1ccb51a38687",
   "ListItemUniqueId":"a46a8f64-0ecf-415b-b372-32852c160d74",
   "Site":"2839182391823819238192389",
   "UserAgent":"MSOCS",
   "WebId":"1092301723729813",
   "HighPriorityMediaProcessing":false,
   "SourceFileExtension":"xlsx",
   "SiteUrl":"https://someorganization.sharepoint.com/sites/MondayMeetings862/",
   "SourceFileName":"Investment Contact Database (MASTER) 1.xlsx",
   "SourceRelativeUrl":"Shared Documents/folder/folders/COMMERCIAL/Contact Database"
}
 

Желаемый результат:

 CREATION_DATE: 2021-08-30  
USER_EMAIL: Jack@sample.com          
ACTION: File Access Extended                
CLIENTIP: 11.11.11.11
 

Комментарии:

1. По-моему, это похоже на json.

2. Боже мой … — _ _ — еще работа.

3. Какой тип данных является столбцом auditdata ?

4. @ThomasWard: В Postgres есть множество функций для работы со значениями JSON

5. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Предполагая auditdata , что это столбец типа jsonb (или, по крайней мере json ), вы можете использовать ->> оператор для извлечения из него значения:

 select creation_date, user_email, action,
       auditdata ->> 'ClientIP' as client_ip
from the_table;
 

Если по какой-то причине столбец правильно определен как a jsonb (или, по крайней мере json ), вам нужно привести значение auditdata::jsonb ->> 'ClientIP'

Комментарии:

1. Большое вам спасибо, эта штука работала как заклинание, просто нужно было преобразовать тип данных в json… работает как по волшебству

Ответ №2:

ОК. А вот и куча «если». Если AuditData представляет собой массив. И если клиент надежно находится в том же положении, то

 SELECT AuditData[6] FROM MyTable
 

должен дать

 "ClientIP":"11.11.11.11"
 

Вы можете удалить двойные кавычки, используя строковую функцию replace, чтобы заменить двойные кавычки ничем.