2012-05-23 65 views
0

以下兩個函數我想將它們從Access轉換到SQL Server中,我該如何修改我的代碼?非常感謝。我以前從不使用SQL服務器,並努力學習它。 LIS是一個驅動器將MS Access中的代碼轉換爲SQL服務器

Public Function PathDate(Ndate As Date) As Long 
    PathDate = (Year(Ndate) * 10000) + (Month(Ndate) * 100) + Day(Ndate) 
End Function 

Public Function NormalDate(LISDate As Long) As Date 

    If (LISDate = -1) Then 
     NormalDate = "-1" 
    Else 
     NormalDate = MonthName(LISDate \ 100 Mod 100) & " " & LISDate Mod 100 & " ," & LISDate \ 10000 
    End If 
End Function 
+0

當你說要轉換它們時,你想要將它們轉換成什麼?在查詢中使用它們內聯?作爲存儲過程?作爲用戶定義的函數?正如bluefeet所問,到目前爲止你已經嘗試了哪些代碼,那沒有奏效?你是否搜索了搜索詞'sqlname中的月份名'呢? –

+0

SQL Server中的過程與MS-Access具有不同的結構,例如它們不會是「公共函數」,嘗試搜索「T-SQL」或「Transact SQL」,因爲這是SQL Server使用的過程。 –

+0

@bluefeet我試圖使用SSMA來轉換代碼,但我認爲這可能有效,但事實並非如此。我不知道VBA,現在就學習它。感謝您的幫助。 –

回答

2

在SQL Server中,你不必做所有的數學計算將日期轉換爲整數並返回。

第一個:

CREATE FUNCTION dbo.PathDate 
(
    @NDate DATETIME 
) 
RETURNS INT 
AS 
BEGIN 
    RETURN (SELECT CONVERT(CHAR(8), @NDate, 112)); 
END 
GO 

二之一:

CREATE FUNCTION dbo.NormalDate 
(
    @LISDate INT 
) 
RETURNS VARCHAR(32) 
AS 
BEGIN 
    RETURN (SELECT DATENAME(MONTH, d) 
     + ' ' + RTRIM(DAY(d)) 
     + ', ' + RTRIM(YEAR(d)) 
    FROM 
    (
     SELECT d = CONVERT(DATETIME, CONVERT(CHAR(8), @LISDate)) 
    ) AS d); 
END 
GO 

實例:

DECLARE @NDate DATETIME, @LISDate INT; 

SELECT @NDate = GETDATE(), @LISDate = 20120523; 

SELECT dbo.PathDate(@NDate), dbo.NormalDate(@LISDate); 

結果:

20120523  May 23, 2012