2012-06-02 86 views
0

使用SQL Server 2000如何獲得年月日起

日期像20120101, 20120201, 20120301...

Fomat是yyyymmdd

我想從日像01/2012顯示年份和月份,02/2012,03/2012 ...

期望輸出

01/2012 
02/2012 
03/2012 

我不想1/2012, 2/2012, 3/2012...

任何一個可以給我一個想法或查詢幫助....

+1

你已經問過關於同一個數據集和同一個表的很多問題,所以除了marc_s的有用答案之外,值得注意的是,這是日曆表可能對你有所幫助的另一種情況。如果添加一個名爲'YYYYMMDD_Date'的列和一個名爲'Period'的列(因爲您稱其爲另一個問題),那麼您可以直接查詢和連接值,這通常比使用函數更簡單快捷。 – Pondlife

回答

2

您可以使用這樣的事情:

DECLARE @input VARCHAR(20) 
SET @input = '20120101' 

-- convert the 20120101 to a DATETIME  
DECLARE @thedate DATETIME 
SELECT @thedate = CONVERT(DATETIME, @input, 112) 

-- reformat that DATETIME to your needs  
DECLARE @output VARCHAR(20) 

SET @output = RIGHT('00' + CAST(DATEPART(MONTH, @thedate) AS VARCHAR(2)), 2) + 
       '/' + CAST(DATEPART(YEAR, @thedate) AS VARCHAR(4)) 

SELECT @output 

你可以「隱藏」這個功能到用戶自定義功能,使之更容易在代碼中使用:

CREATE FUNCTION dbo.MonthYearFromDate (@input VARCHAR(20)) 
RETURNS VARCHAR(20) 
AS BEGIN 
    DECLARE @thedate DATETIME 
    SELECT @thedate = CONVERT(DATETIME, @input, 112) 

    DECLARE @output VARCHAR(20) 
    SET @output = RIGHT('00' + CAST(DATEPART(MONTH, @thedate) AS VARCHAR(2)), 2) + '/' + CAST(DATEPART(YEAR, @thedate) AS VARCHAR(4)) 

    RETURN @output 
END 

,然後你可以調用這個像這樣:

SELECT dbo.MonthYearFromDate('20120515') 

,並得到輸出

05/2012 
1
SELECT CAST(datepart(month,getdate()) AS CHAR) + '/' + CAST(datepart(year,getdate()) AS CHAR) 

取而代之的是功能GETDATE()你需要你的日期字段。

+0

**獲取錯誤:**消息245,級別16,狀態1,行1 - 將varchar值「/」轉換爲數據類型int時轉換失敗。 'DATEPART'返回一個'INT' - 你不能只用'INT'和一個字符串文字'/'而不用CAST或CONVERT .... –

+0

嘗試用更新的查詢... – aleroot

+0

使用'CAST(... AS CHAR)'(沒有指定長度)將月份和年份變成** 30個字符,固定寬度**字符串.....不完全是你想要的。另外:對於5月份,你會得到'5'作爲月份輸出 - 不是'05',因爲OP期望... –

0

上提取搜索()函數。它會解決你的問題。

+2

如何?什麼是'extract()'函數?你能舉一個例子來說明如何使用它嗎?一個鏈接到它的文檔?我不熟悉SQL Server的T-SQL語言中的任何'extract()'函數.... –

相關問題