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

SQL中使用if else条件按规则截取ndc字段sub string的方法咨询

NDC字段截取逻辑SQL实现方案

核心实现代码(兼容绝大多数SQL数据库)

SELECT 
  CASE
    -- 匹配以NOT APP开头的取值,截取前14位
    WHEN ndc LIKE 'NOT APP%' THEN SUBSTR(ndc, 1, 14)
    -- 匹配以数字开头的取值,截取前11位
    WHEN LEFT(ndc, 1) BETWEEN '0' AND '9' THEN SUBSTR(ndc, 1, 11)
    -- 其余场景可自定义返回值,默认返回原始值
    ELSE ndc
  END AS processed_ndc
FROM 你的表名;

注意事项

  • 字符串索引适配:主流SQL数据库(MySQL、PostgreSQL、Oracle、SQL Server)的SUBSTR函数默认从1开始计数,如果你使用的数据库字符串索引从0开始,将上述代码中的起始位参数1改为0即可。
  • 开头匹配规则:不要使用%NOT APP%作为匹配条件,前后加通配符为全局包含匹配,仅后缀加通配符的NOT APP%才是开头匹配,符合需求。
  • 数字开头判断的正则写法(可选):如果需要更严谨的判断,可对应数据库替换数字开头的判断条件:
    • MySQL/PostgreSQL:ndc REGEXP '^[0-9]'
    • Oracle:REGEXP_LIKE(ndc, '^[0-9]')
    • SQL Server:ndc LIKE '[0-9]%'

功能验证方法

你可以执行以下测试语句验证截取结果是否符合预期,无需操作业务表:

SELECT 
  ndc,
  CASE
    WHEN ndc LIKE 'NOT APP%' THEN SUBSTR(ndc, 1, 14)
    WHEN LEFT(ndc, 1) BETWEEN '0' AND '9' THEN SUBSTR(ndc, 1, 11)
    ELSE ndc
  END AS processed_ndc
FROM (
  SELECT '00037002207 EN' AS ndc UNION ALL
  SELECT '64370042140 CR' AS ndc UNION ALL
  SELECT 'NOT APPLICABLE' AS ndc
) test_data;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:05