根据每月的天数显示N个列的最佳方法是什么

时间:2015-08-26 14:32:42

标签: sql-server-2005

我想展示这种输出

UserID  UserName 1  2  3 30

OR

UserID  UserName 1  2  3 31

用户数据保存在db select distinct UserID,Name from Userss Where IsActive=1 and order by UserID

我想根据用户提供的年月名来计算月中的天数。

我能做到的一种方式。首先,我将创建一个临时表,并在循环中向该表添加许多列,然后将用户数据转储到特定列。我不确定我是在正确的方向思考。任何人都可以提出建议或代码示例来实现它。感谢

修改

刚刚获得了一个按日期返回没有天数的函数。这是

CREATE FUNCTION [dbo].[ufn_GetDaysInMonth] ( @pDate    DATETIME )
RETURNS INT
AS
BEGIN

    RETURN CASE WHEN MONTH(@pDate) IN (1, 3, 5, 7, 8, 10, 12) THEN 31
                WHEN MONTH(@pDate) IN (4, 6, 9, 11) THEN 30
                ELSE CASE WHEN (YEAR(@pDate) % 4    = 0 AND
                                YEAR(@pDate) % 100 != 0) OR
                               (YEAR(@pDate) % 400  = 0)
                          THEN 29
                          ELSE 28
                     END
           END

END
GO

select [dbo].[ufn_GetDaysInMonth](CAST('06/01/2015' as datetime))

所以现在我关心的是使用用户ID和名称动态生成列,而不是几个月。感谢

2 个答案:

答案 0 :(得分:0)

尝试这样的日期:

DECLARE @Month VARCHAR(15)
DECLARE @Year SMALLINT
DECLARE @date DATETIME 
SET @Month = 'February'
SET @Year = 2015
SET @date = '01 ' + @Month + ' ' + CONVERT(VARCHAR(4),@Year)

/*Here is the action part:*/    
SELECT DATEDIFF(DAY, @date, DATEADD(MONTH, 1, @date))

对于其他需求研究计算列:

MSDN: How to: Specify Computed Columns (Visual Database Tools)

以下是该页面的详细信息:

指定计算列

  1. 在对象资源管理器中,右键单击包含您的列的表 想要指定计算列并单击“设计”(在SP1或中修改) 更早)。该表在表设计器中打开。
  2. 选择要为其指定计算列的列 式。
  3. 在“列属性”选项卡中,展开“计算列规范”属性。在(公式)子属性中,在右侧的网格单元格中键入此列的表达式。例如,ColumnA + ColumnB。
  4. 通过从Is Persisted子属性的下拉列表中选择Yes或No来指示数据是否持久保存。

答案 1 :(得分:-1)

ALTER TABLE table_name   ADD COLUMN column_name column-definition; Psuedo Code如果我理解你的问题

Check Year (for Leap years)
If (leapYear == true)
{
    if (month = 1,3,5,7,8,10,12) 
        days = 31
    else if (month = 4,6,9,11) 
        days = 30
    else 
        days =29  
}
else
{
    if (month = 1,3,5,7,8,10,12) 
        days = 31
    else if (month = 4,6,9,11) 
        days = 30
    else 
        days =28 
}
for (i=1;i<=days;i++)
     ALTER TABLE table_name
     ADD COLUMN column_name column-definition; // u get columns added as per number of days