You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL解析值:如何提取机构捐赠者条目至新列?

解决方案:分离数据库中的个人与机构捐赠者

当然可以!这是处理捐赠类数据库时非常常见的需求——咱们完全可以通过模式匹配识别带有特殊标识的机构名称,把它们提取到新列里。下面针对几种主流数据库给出具体的实现步骤:

一、先准备新列(通用前置步骤)

首先你需要给表添加两个新列:一个标记是否为机构(后续查询会更方便),另一个专门存储机构名称。如果只需要提取机构名称到新列,也可以只加后者。

以表名为donations为例,先看通用的列添加逻辑(不同数据库语法略有差异,下面会细化):

二、分数据库具体实现

MySQL/MariaDB

  1. 添加新列:
ALTER TABLE donations 
ADD COLUMN is_organization BOOLEAN DEFAULT FALSE,
ADD COLUMN organization_name VARCHAR(255);
  1. 匹配特殊字符并更新数据:
UPDATE donations
SET is_organization = TRUE,
    organization_name = donor_name
WHERE donor_name REGEXP 'LLC|&|Inc\\.';

小贴士:正则里的.是通配符,所以要加\\转义;如果想更精准(避免误匹配名字里带"Inc"的个人),可以改成匹配带空格的标识,比如' LLC | & | Inc\\. '

PostgreSQL

  1. 添加新列:
ALTER TABLE donations 
ADD COLUMN is_organization BOOLEAN DEFAULT FALSE,
ADD COLUMN organization_name VARCHAR(255);
  1. 不区分大小写匹配并更新:
UPDATE donations
SET is_organization = TRUE,
    organization_name = donor_name
WHERE donor_name ~* 'LLC|&|Inc\\.';

~*表示不区分大小写匹配,能覆盖比如"llc"、"INC."这类大小写不一致的情况

SQL Server

  1. 添加新列:
ALTER TABLE donations 
ADD is_organization BIT DEFAULT 0,
ADD organization_name VARCHAR(255);
  1. 用LIKE匹配更新:
UPDATE donations
SET is_organization = 1,
    organization_name = donor_name
WHERE donor_name LIKE '%LLC%'
   OR donor_name LIKE '%&%'
   OR donor_name LIKE '%Inc.%';

或者用更灵活的PATINDEX:

UPDATE donations
SET is_organization = 1,
    organization_name = donor_name
WHERE PATINDEX('%LLC%', donor_name) > 0
   OR PATINDEX('%&%', donor_name) > 0
   OR PATINDEX('%Inc.%', donor_name) > 0;

三、重要注意事项

  • 先测试再更新:在执行UPDATE之前,先运行SELECT语句验证匹配结果,比如:
    SELECT donor_name FROM donations WHERE donor_name REGEXP 'LLC|&|Inc\\.'; -- MySQL示例
    
    确保没有误匹配后再执行更新,避免数据错误。
  • 扩展匹配规则:如果还有其他机构标识(比如"Corp"、"Ltd"),直接在正则或LIKE条件里补充即可。
  • 处理个人名称:如果需要把个人捐赠者的名称也放到单独列,只需要用反向条件(比如NOT REGEXP)更新对应的列就行。

内容的提问来源于stack exchange,提问作者liz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:26:19