2012-03-22 59 views
1

日期在我SQL Server數據庫的字符串我曾經日期存儲爲CHAR(12)按以下格式提取一個月:如何從代表TSQL

爲yyyymmddhhmm

我沒有創建定義,我不能修改它。我總是通過使用C#在應用程序級別處理這個字符串。

現在我需要在TSQL執行任務,我需要組按月。因此我需要提取月份。是否有任何TSQL功能可用於此任務?

如果沒有,它是一個很好的解決方案,以創建一個存儲過程,getMonth(stringDate),是以串並提取第四和第五個字符的呢?我可以使用該條款:

group by getMonth(stringDate) 

在我的查詢?謝謝

+0

您確定要按月分組而不是按月分組嗎?你真的想結合不同年份同月的價值嗎? – GilM 2012-03-22 19:12:24

回答

1

可以使用下面是獲取你的月份,因爲月份在4個字符年後總是2個字符。

declare @date char(12) 
set @date = '201203220906' 
select substring(@date, 5, 2) 

結果:03

或另一種方式來得到它,那麼你可以group by在任一查詢的結果:

declare @date char(12) 
set @date = '201203220906' 
select Month(cast(left(@date, 8) as datetime)) 
3

你可以;

SUBSTRING(fld, 5, 2) 

個人而言,我不會創造這麼簡單的東西(這是你會考慮什麼,而不是SP),除非你發現自己需要該字符串轉換爲UDF DATETIME小號

1

假設

CREATE TABLE #Table(
    DateValue char(12), 
    Value int) 

INSERT INTO #Table VALUES ('20120110833', 1) 
INSERT INTO #Table VALUES ('20120110833', 2) 
INSERT INTO #Table VALUES ('20120110833', 3) 
INSERT INTO #Table VALUES ('20120210833', 4) 
INSERT INTO #Table VALUES ('20120210833', 5) 

你可以簡單地這樣做:

select 
    MONTH(CAST(LEFT(DateValue, 8) as datetime)) Month, 
    SUM(value) 
FROM 
    #Table 
GROUP BY 
    MONTH(CAST(LEFT(DateValue, 8) as datetime)) 

修剪時/分的一部分,強制轉換爲datetime和應用MONTH函數

0

對於這個特定的情況下(char類型與格式爲yyyymmddhhmm日期),你可以在查詢中使用的下一個功能:

子(提取年月日), 轉換(得到datetime值), 日期部分(取得月份部分)

...那麼你可以通過組每月(或其他日期部分),改變datecolumnname和表名與適當的價值

select datepart(month,convert(datetime,substring(datecolumnname,1,8),112)), 
    count(datepart(month,convert(datetime,substring(datecolumnname,1,8),112))) 
from tablename 
    group by datepart(month,convert(datetime,substring(datecolumnname,1,8),112))