如何编写SQL存储过程查询当前时间及星期几(入门级)
SQL存储过程实现获取当前时间与星期教程
不同数据库的内置时间函数语法存在差异,以下提供主流数据库的可直接运行实现方案,核心逻辑是剔除日期部分仅保留时分秒,同时转换出对应星期名称。
核心实现逻辑
- 调用数据库内置系统时间函数获取当前完整时间戳
- 对时间戳做类型转换,提取时分秒部分,丢弃年月日日期信息
- 通过日期函数获取当前时间对应的星期枚举值,再转义为可读的星期名称(如周一)
- 可按需添加校验逻辑,判断当前时间是否符合你项目中要求的特定区间
MySQL 实现示例
创建存储过程代码
DELIMITER // CREATE PROCEDURE GetCurrentTimeAndWeekday() BEGIN -- 声明变量存储结果 DECLARE cur_time TIME; DECLARE cur_weekday VARCHAR(10); -- 获取仅含时分秒的当前时间 SET cur_time = CURTIME(); -- 转换为中文星期名称,DAYOFWEEK返回规则:1=周日、2=周一、...、7=周六 SET cur_weekday = CASE DAYOFWEEK(NOW()) WHEN 1 THEN '周日' WHEN 2 THEN '周一' WHEN 3 THEN '周二' WHEN 4 THEN '周三' WHEN 5 THEN '周四' WHEN 6 THEN '周五' WHEN 7 THEN '周六' END; -- 输出查询结果,若需要对接业务代码可改为OUT参数返回 SELECT cur_time AS 当前具体时间, cur_weekday AS 对应星期; -- 可选:添加自定义校验逻辑,示例为校验是否为上课时间段 /* IF cur_weekday IN ('周一','周二','周三','周四','周五') AND cur_time BETWEEN '08:00:00' AND '18:00:00' THEN SELECT '当前属于上课时间段' AS 校验结果; ELSE SELECT '当前不属于上课时间段' AS 校验结果; END IF; */ END // DELIMITER ;
调用方式
CALL GetCurrentTimeAndWeekday();
SQL Server 实现示例
创建存储过程代码
CREATE PROCEDURE GetCurrentTimeAndWeekday AS BEGIN SET NOCOUNT ON; -- 声明变量存储结果 DECLARE @cur_time TIME; DECLARE @cur_weekday VARCHAR(10); -- 获取仅含时分秒的当前时间 SET @cur_time = CAST(GETDATE() AS TIME); -- 转换为中文星期名称,DATEPART(WEEKDAY)返回规则和MySQL一致:1=周日、2=周一...7=周六 SET @cur_weekday = CASE DATEPART(WEEKDAY, GETDATE()) WHEN 1 THEN '周日' WHEN 2 THEN '周一' WHEN 3 THEN '周二' WHEN 4 THEN '周三' WHEN 5 THEN '周四' WHEN 6 THEN '周五' WHEN 7 THEN '周六' END; -- 返回查询结果 SELECT @cur_time AS 当前具体时间, @cur_weekday AS 对应星期; END
调用方式
EXEC GetCurrentTimeAndWeekday;
注意事项
- 若需要英文星期名称,可直接替换CASE语句中的中文值,MySQL也可以直接调用
DAYNAME(NOW())直接获取英文星期名 - 部分数据库的星期起始规则可能存在配置差异,正式使用前可以单独执行
DAYOFWEEK(NOW())(或对应数据库的星期函数)确认返回值和实际星期的对应关系,避免匹配错误 - 存储过程的返回形式可以根据项目需求调整,比如新增OUT参数把结果直接传递给上层业务代码,不需要直接返回查询结果
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

