【问题标题】:How to fetch the records from the SQL Server Database using loop如何使用循环从 SQL Server 数据库中获取记录
【发布时间】:2023-01-07 23:17:55
【问题描述】:

我有一个员工表,我需要根据指定月份的最后 12 个月的课程 1 加入日期获取员工的详细信息。

表设计

+-----------+-------------+
| Field     | Type        |   
+-----------+-------------+    
| emp_name  | varchar(30) | 
| join_date | date        | 
| emp_id    | int(5)      | 
| c1_date   | date        | 
+-----------+-------------+

我想在下面显示输出。 c1_date 过去 12 个月员工详细信息的加入日期。

例如,今天日期是 7/1/2023

第一个月:

emp_id , emp_name , joining_date , c1_date
1         xxx        21-7-7         12-12-2022
2         yyy        22-2-1         1-12-2022

第二个月:

emp_id , emp_name , joining_date , c1_date
11         abc        21-7-7         12-11-2022
21         cde        22-2-1         1-11-2022

就像上面我想生成的过去 12 个月一样,我已经为此要求创建了一个过程,但是我得到的所有记录都没有 c1_date -1、-2、-3..

CREATE PROCEDURE [dbo].[StudentReport] 
    @FromDate datetime =null
AS 

DECLARE @count INT;
SET @count = -1;

WHILE @count>= -12
BEGIN
   SELECT *
    FROM [Student]
    WHERE [Group Type] ='AIS-140' AND
    [c1_date] BETWEEN DATEADD(MONTH, @count, GETDATE()) AND GETDATE()
   SET @count = @count - 1;
END;

帮我弄清楚我在哪里犯了错误。

【问题讨论】:

  • Pet Peeve ... 模棱两可的日期 我怀疑循环不是必需的,应该避免。简单连接到日历表甚至临时数字表

标签: sql-server select stored-procedures dateadd


【解决方案1】:

这是行不通的,因为如果例如GETDATE()='2023/01/07' 那么DATEADD(MONTH, -1, GETDATE()) 就是'2022/12/07'。所以,你不会得到完整的月份。见How can I select the first day of a month in SQL?。而且,在 SQL 中循环通常不是一个好主意。看; Optimizing SQL: Removing queries inside loops

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2016-08-17
    • 2014-01-06
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多