0
IF object_id('tempdb..#A')  IS NOT NULL DROP TABLE #A
CREATE TABLE #A (Computer varchar(20), Name varchar(20), Month varchar(20))

INSERT INTO #A
SELECT 'PC1', 'Bob', 'June'
UNION ALL
SELECT 'PC1', 'Tammy', 'January'
UNION ALL
SELECT 'PC1', 'Wes', 'September'
UNION ALL 
SELECT 'PC1', 'Susan', 'October'
UNION ALL
SELECT 'PC1', 'Kevin', 'February'


SELECT * FROM #A

これにより、次の結果が生成されます。

  Computer  Name        Month
    PC1     Bob         June
    PC1     Tammy       January
    PC1     Wes         September
    PC1     Susan       October
    PC1     Kevin       February

月の列は、その月にこのコンピューターにログインした最も人気のあるユーザーです。

最近ログインしたユーザーを表示したいのですが、今月または先月もログインしていない可能性があります。

上記の例では、今日が 6 月の場合、PC1 のケビンを選択します。

本当に、関数が現在の月に対して指定された月の1〜12の数値を返すようにしたいと思います。

今日が6月26日なら

udf_month('June') would return 12
udf_month('May') would return 11
udf_month('January') would return 7
udf_month('December') would return 6
udf_month('July') would return 1

今日が 7 月 1 日の場合、udf_month('June') は 11 を返します。

次に、SELECT Computer, Name, Max(udf_Month(Month)) を実行して、各コンピューターの最新の名前を見つけることができます。

正しい?

4

2 に答える 2

2

これを試して:

CREATE FUNCTION [dbo].[udf_month](@V_Month AS VARCHAR(20)) 
RETURNS INT AS 
BEGIN
    DECLARE @V_MonthNo INT, @V_InputMonthNo INT, @V_CurrentMonthNo INT;
    SELECT @V_InputMonthNo = DATEPART(MM, @V_Month + ' 01 2013'), @V_CurrentMonthNo = MONTH(GETDATE());
    SET @V_MonthNo = 12 - @V_CurrentMonthNo + @V_InputMonthNo;

    IF (@V_MonthNo > 12) 
    BEGIN 
        SET @V_MonthNo = @V_MonthNo - 12;
    END

    RETURN @V_MonthNo;
END
于 2013-06-27T05:42:18.620 に答える
1

これを試して:-

ALTER FUNCTION [dbo].[udf_month](@Month AS VARCHAR(20))

INT AS を返します

始める

@mon を varchar(50) として宣言します

@year を varchar(50) として宣言します

@date を varchar(50) として宣言します

@RESULT を varchar(50) として宣言します

set @mon= (DATEPART(MM, @Month + ' 01 2012') を選択)

set @year=(@mon<=MONTH(getdate()) の場合、YEAR(getdate())+1 ELSE YEAR(getdate()) END)

set @date=(select @mon+'-01-'+@year)

set @RESULT= ( @mon<=MONTH(getdate()) の場合) then DATEDIFF(mm,getdate(),@date) ELSE replace(DATEDIFF(mm,@date,getdate()),'-','' ) 終わり)

RETURN @RESULT ;

終わり

行く

于 2013-06-27T07:14:17.007 に答える