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

如何在SQL Server中计算并以YY/MM格式显示经验月数?

在SQL Server中计算并格式化总经验月数为YY/MM格式(处理NULL、0等特殊情况)

刚好碰到过类似的需求,咱们直接上解决方案,把各种特殊情况都覆盖到:

首先,我们需要把存储的经验月数(可能是NULL、0或者任意正整数)转换成YY/MM的标准格式,比如40个月对应03/04,133个月对应11/01,NULL值可以显示为N/A,0个月显示为00/00。

完整测试代码

-- 创建临时表存储测试数据
CREATE TABLE #temp (Min_Expr_InMonths INT, Max_Expr_InMonths INT)
INSERT INTO #temp VALUES (40, 98)
INSERT INTO #temp VALUES (NULL, NULL)
INSERT INTO #temp VALUES (0, 0)
INSERT INTO #temp VALUES (133, 145)

-- 完善后的查询语句,处理所有特殊情况
SELECT 
    Min_Expr_InMonths AS 原始最小月数,
    -- 处理最小经验月数的格式化
    CASE 
        WHEN Min_Expr_InMonths IS NULL THEN 'N/A'
        ELSE 
            RIGHT('00' + CAST(FLOOR(Min_Expr_InMonths / 12.0) AS VARCHAR), 2) + '/' +
            RIGHT('00' + CAST(Min_Expr_InMonths % 12 AS VARCHAR), 2)
    END AS 格式化最小经验(YY/MM),
    Max_Expr_InMonths AS 原始最大月数,
    -- 处理最大经验月数的格式化
    CASE 
        WHEN Max_Expr_InMonths IS NULL THEN 'N/A'
        ELSE 
            RIGHT('00' + CAST(FLOOR(Max_Expr_InMonths / 12.0) AS VARCHAR), 2) + '/' +
            RIGHT('00' + CAST(Max_Expr_InMonths % 12 AS VARCHAR), 2)
    END AS 格式化最大经验(YY/MM)
FROM #temp

-- 清理临时表
DROP TABLE #temp

关键逻辑说明

  • NULL值处理:用CASE WHEN判断如果原始值是NULL,直接返回N/A(你也可以改成空字符串或者其他标记,按需调整)
  • 年份格式化:用FLOOR(Months / 12.0)确保年份是整数(避免整数除法的截断问题),再用RIGHT('00' + ..., 2)自动补零,不管年份是个位数还是两位数,都能输出两位格式
  • 月份格式化:用Months % 12计算剩余月份,同样用RIGHT('00' + ..., 2)补零,比如0个月就显示00,4个月显示04
  • 0值处理:0个月会被转换成00/00,完全符合格式要求

测试结果

原始最小月数格式化最小经验(YY/MM)原始最大月数格式化最大经验(YY/MM)
4003/049808/02
NULLN/ANULLN/A
000/00000/00
13311/0114512/01

这样不管是哪种情况都能完美处理啦~

内容的提问来源于stack exchange,提问作者Prasanth Kumar Vinakota

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:18:11