LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 154|回复: 0

SQL 语句中的字段处理(如类型转换、字符串截取、条件计....

[复制链接]
发表于 2025-8-5 14:09:08 | 显示全部楼层 |阅读模式
本帖最后由 xhz 于 08-05 编辑

1. 时间格式转换:统一展示规范[color=rgba(0, 0, 0, 0.85) !important]通过 CONVERT 函数将日期时间类型转换为特定字符串格式,满足业务展示或系统交互需求:

  • convert(varchar(100), getdate(), 112) 打印时间
    将当前系统时间(getdate())转换为 yyyymmdd 格式(如 20250805),作为 “打印时间” 字段,确保时间格式统一且易读。
  • CONVERT(varchar(100), a.ProductDate, 20) lsdate
    将生产日期(a.ProductDate)转换为 yyyy-mm-dd hh:mi:ss 格式(如 2025-08-05 14:30:00),保留完整时间信息。
  • CONVERT(varchar(100), a.ProductDate, 23) lsdate1
    将生产日期转换为 yyyy-mm-dd 格式(如 2025-08-05),仅保留日期部分,适用于只需要日期的场景(如报表表头)。

2. 字符串截取:提取关键信息[color=rgba(0, 0, 0, 0.85) !important]通过 right 函数从长字符串中截取特定部分,作为业务标识:

  • right(b.TB11ID, 4) liushuihao
    从 TB11ID(可能是一个长编号,如 4000100001325080410010002)的右侧截取后 4 位(如 0002),作为 “流水号”(liushuihao),简化编号用于内部流转或展示。
3. 条件计算:衍生业务字段[color=rgba(0, 0, 0, 0.85) !important]通过 case when 和 DATEADD 等函数,基于原始字段计算新的业务指标:

  • case when a.LifeDateLen>0 then DATEADD(DAY, CAST(a.LifeDateLen as int), CAST(a.LifeDate as datetime)) end lifeEndDate
    计算物料的 “有效期截止日期”:
    • 若 LifeDateLen(有效期天数)大于 0,则用 “起始日期(LifeDate)+ 天数” 计算截止日期;
    • 否则返回 NULL。
      该字段直接体现物料的过期时间,用于库存管理或质量控制。

4. 别名映射:统一业务命名[color=rgba(0, 0, 0, 0.85) !important]为原始字段添加别名,使结果更符合业务术语,便于理解和使用:

  • c.TB8Unit 单位:将表 TB8 的 TB8Unit 字段重命名为 “单位”,直观表示物料的计量单位(如个、件、千克)。
  • j9.FSHORTNAME 供应商简称:将供应商表的 FSHORTNAME 字段重命名为 “供应商简称”,明确字段含义。
  • k1.FCUSTMATNO FMapNumber1:将客户物料映射表的 FCUSTMATNO 重命名为 “客户侧物料编号”,区分内部编码和客户编码。
5. 多表字段整合:聚合关联信息[color=rgba(0, 0, 0, 0.85) !important]通过关联查询将多个表的字段整合到结果中,避免多次查询:

  • 同时包含主表 TSB2 的物料信息(a.ERPSN、a.BarCodeNum)、关联表 TB11 的明细(b.barCodeP、b.Other1)、供应商表的信息(j1.Fnumber GYSnumber、j9.FSHORTNAME)等,一次性获取物料全链路数据。
总结[color=rgba(0, 0, 0, 0.85) !important]字段处理的核心目的是 **“数据适配”**:将数据库中存储的原始数据(可能格式不统一、含义不直观、分散在多表中)转换为业务场景所需的 “即用型数据”,减少下游系统的处理成本,同时确保数据的可读性和一致性。例如,时间格式转换便于报表展示,流水号截取便于人工核对,有效期计算直接支持库存管理决策等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表