我想展示这种输出
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和名称动态生成列,而不是几个月。感谢
答案 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 :(得分:-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