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

如何将Genericattribute表中int类型出生日期转日期并判断今日生日

解决方案:int转日期+今日生日查询与触发器实现

1. 把int类型出生日期转为Date类型

假设value字段是yyyymmdd格式的整数(比如19951001代表1995年10月1日),用以下转换逻辑:

SELECT 
    [id],
    -- 先转成字符串,再转成Date类型
    CONVERT(DATE, CAST([value] AS VARCHAR(8)), 112) AS birth_date
FROM [Genericattribute]
WHERE [key] = 'DateOfBirth'

112是SQL Server中对应yyyymmdd格式的转换码,能确保转换精准。如果你的int是其他格式(比如mmddyyyy或时间戳),需要调整转换方式。

2. 查询今日过生日的员工

只需要对比出生日期的月份和日期,不用考虑年份:

高效写法(推荐)

SELECT 
    [id],
    CONVERT(DATE, CAST([value] AS VARCHAR(8)), 112) AS birth_date
FROM [Genericattribute]
WHERE 
    [key] = 'DateOfBirth'
    AND MONTH(CONVERT(DATE, CAST([value] AS VARCHAR(8)), 112)) = MONTH(GETDATE())
    AND DAY(CONVERT(DATE, CAST([value] AS VARCHAR(8)), 112)) = DAY(GETDATE())

简洁写法

SELECT 
    [id],
    CONVERT(DATE, CAST([value] AS VARCHAR(8)), 112) AS birth_date
FROM [Genericattribute]
WHERE 
    [key] = 'DateOfBirth'
    AND FORMAT(CONVERT(DATE, CAST([value] AS VARCHAR(8)), 112), 'MMdd') = FORMAT(GETDATE(), 'MMdd')

3. 创建生日检查触发器(可选)

如果需要在员工生日数据新增/修改时即时检查,或者每日自动执行检查,可参考以下实现:

新增/修改时触发的触发器

CREATE TRIGGER trg_CheckBirthday
ON [Genericattribute]
AFTER INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    -- 输出今日过生日的新增/修改员工
    SELECT 
        i.[id],
        CONVERT(DATE, CAST(i.[value] AS VARCHAR(8)), 112) AS birth_date
    FROM inserted i
    WHERE 
        i.[key] = 'DateOfBirth'
        AND MONTH(CONVERT(DATE, CAST(i.[value] AS VARCHAR(8)), 112)) = MONTH(GETDATE())
        AND DAY(CONVERT(DATE, CAST(i.[value] AS VARCHAR(8)), 112)) = DAY(GETDATE());
END

若需要触发业务动作(比如发送生日提醒),可在触发器内添加对应逻辑。如果需要每日批量检查,建议创建SQL Server代理作业定时执行上述查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:05:22