如何通过SQL提取Column A中""""间的内容至Column B?
需求说明
我需要从A列的结构化数据中提取所有位于""之间的内容(例如Activity、DatasetId、RecordType等),并将这些内容合并后放入B列中。
示例数据
| A列 |
|---|
{""Activity"":""ConnectFromExternalApplication"",""Id"":""xz[we-654231-aja"",""RecordType"":20,""CreationTime"":""2024-02-13T17:59:44"",""Operation"":""ConnectExternal"",""OrganizationId"":""[REDACTED]"",""UserType"":0,""UserKey"":""bb0-649-429-a53f-b6328"",""Workload"":""BI"",""ResultStatus":null,""UserId"":""bb0-16-4219-a53f-665328"",""ClientIP":null,""CustomData":""""} |
{""Id"":""f120-00c3-4ddb-ba60-c9ed83df0"",""RecordType"":20,""CreationTime"":""2023-03-13T17:46:14"",""Operation"":""ViewReport"",""OrganizationId"":""[REDACTED]"",""UserType"":0,""UserKey"":""100300009C22A108"",""Workload"":""PowerBI"",""UserId"":""Ben.@x.uk"",""ClientIP"":""213.174.203.7"",""Activity"":""ViewReport"",""ItemName"":""Opt Dashboard"",""WorkSpaceName"":""UK Operational Reports"",""DatasetName"":""Operational Dashboard"",""ReportName"":""Operational Dashboard"",""CapacityId"":""82EF1AA9-0554-4E95-B249-15F"",""CapacityName"":""BI UK Capacity 1"",""WorkspaceId"":""6588ee54-5b73-441d-a3ac-f133f"",""AppName"":""UK Operational Reports"",""ObjectId"":""Operational Dashboard"",""DatasetId"":""1cd1ce2f-9395-4be0-9521-3e38e7e236b8"",""ReportId"":""76d769fd-a9ec-4c77-ac3d-7cd57d9449ca"",""ArtifactId"":""76d769fd-a9ec-4c77-ac3d-7cd57d9449ca"",""ArtifactName"":""Opt Dashboard"",""IsSuccess":true,""ReportType"":""PowerBIReport"",""RequestId"":""a2214fde-dffc-7c30-083c-6702b7"",""ActivityId"":""f61bed2a-5906-425c-8048-682a779900aa"",""AppReportId"":""e0ab7628-73b5-4832-9161-c966996d293e"",""DistributionMethod"":""Apps"",""ConsumptionMethod"":""Power BI Web"",""AppId"":""e44d1e27-1d9d-4585-a477-fb66fcd"",""ArtifactKind"":""Report""} |
提取后B列示例
| B列 |
|---|
| Activity, ConnectFromExternalApplication, Id, RecordType, CreationTime, Operation, ..., CustomData |
| Id, ..., ArtifactKind |
实现方法
方法1:Excel公式批量处理
直接在B1单元格输入以下公式,下拉填充即可:
=TEXTJOIN(", ", TRUE, FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"""""", """")&""",""", """,""""), """:"", """,""""), ""","""", "</s><s>")&"</s></t>", "//s"))
公式逻辑:先将A列的转义双引号("")替换为普通双引号,再拆分键值对结构,提取所有引号内的内容,最后用「逗号+空格」连接成字符串。
方法2:Python脚本高效处理
如果数据量较大,用Python处理更快捷:
import pandas as pd import re # 读取Excel数据(替换为你的文件路径) df = pd.read_excel("data.xlsx", sheet_name="Sheet1") # 定义提取逻辑 def get_quoted_content(text): # 匹配所有""包裹的内容 content_list = re.findall(r'""(.*?)""', text) # 过滤空值(比如CustomData对应的空内容) valid_content = [item for item in content_list if item.strip()] # 合并成目标格式 return ", ".join(valid_content) # 生成B列数据 df["B列"] = df["A列"].apply(get_quoted_content) # 保存结果到新Excel df.to_excel("processed_data.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Nathanael Tom Aterado
相关产品推荐
相关产品推荐

