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

如何在Microsoft SQL Server中将字段拆分为多列?药品列拆分求助

嘿,这个拆分需求挺典型的,我给你整理了几种常用工具的实现方法,你可以根据自己的使用场景来选:

方法1:Excel/Google Sheets 手动拆分

如果用表格工具处理,直接用内置函数就能搞定,假设原始数据在A列(从A2开始):

  • Drugname(药物名):提取第一个空格前的内容,公式:
    =LEFT(A2,FIND(" ",A2)-1)
  • Strength(剂量数值):提取字符串里的数字部分,通用公式(适配多位数):
    =TEXTJOIN("",TRUE,IFERROR(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1,""))
  • Units(单位):提取数字后的单位(比如mg),如果你的单位只有mg,可以用:
    =MID(A2,FIND(TEXTJOIN("",TRUE,IFERROR(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1,"")),A2)+LEN(TEXTJOIN("",TRUE,IFERROR(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1,""))),2)
    如果有多种单位(比如g、mcg),可以调整为:
    =MID(A2,MIN(FIND({"mg","g","mcg"},A2&"mggmcg")),LEN(MID(A2,MIN(FIND({"mg","g","mcg"},A2&"mggmcg")),3))-IF(ISNUMBER(MID(A2,MIN(FIND({"mg","g","mcg"},A2&"mggmcg"))+2,1)*1),1,0))
  • Form(剂型):提取最后一个空格后的内容,公式:
    =RIGHT(A2,LEN(A2)-FIND("~",SUBSTITUTE(A2," ","~",LEN(A2)-LEN(SUBSTITUTE(A2," ","")))))
方法2:Python Pandas 批量处理

如果是处理大量数据,用Python的Pandas结合正则表达式最灵活,代码示例:

import pandas as pd

# 模拟你的数据表
df = pd.DataFrame({
    'DrugInfo': ['Sertraline 100mg tablets', 'Phenobarbitol 20mg capsules']
})

# 用正则表达式匹配拆分,每个括号对应一列
# 适配多种单位的正则:r'^(.+) (\d+)(mg|g|mcg) (\w+)$'
pattern = r'^(\w+) (\d+)(mg) (\w+)$'
df[['Drugname', 'Strength', 'Units', 'Form']] = df['DrugInfo'].str.extract(pattern)

# 查看结果
print(df)

运行后就会直接生成你需要的四列,要是遇到药物名带空格的情况,把正则里的\w+改成.+就能适配。

方法3:SQL 数据库端拆分

如果数据存在数据库里(以MySQL 8.0+为例),可以用正则函数直接提取:

SELECT
    REGEXP_SUBSTR(DrugInfo, '^\\w+') AS Drugname,
    REGEXP_SUBSTR(DrugInfo, '\\d+') AS Strength,
    REGEXP_SUBSTR(DrugInfo, 'mg|g|mcg') AS Units,
    REGEXP_SUBSTR(DrugInfo, '\\w+$') AS Form
FROM your_table_name;

要是用低版本MySQL(不支持正则提取),可以用字符串拼接函数拆分:

SELECT
    SUBSTRING_INDEX(DrugInfo, ' ', 1) AS Drugname,
    SUBSTRING_INDEX(SUBSTRING_INDEX(DrugInfo, ' ', 2), ' ', -1) AS Strength_With_Units,
    REGEXP_REPLACE(SUBSTRING_INDEX(DrugInfo, ' ', 2), '[^0-9]', '') AS Strength,
    REGEXP_REPLACE(SUBSTRING_INDEX(DrugInfo, ' ', 2), '[0-9]', '') AS Units,
    SUBSTRING_INDEX(DrugInfo, ' ', -1) AS Form
FROM your_table_name;

注意事项

  • 如果你的药物名存在多空格(比如"Acetylsalicylic Acid 500mg tablets"),记得调整正则或公式里的匹配规则,比如把匹配药物名的部分改成匹配到数字前的所有内容。
  • 单位如果有更多类型,一定要把所有可能的单位加到正则或查找列表里,避免提取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:15:10