SQL Server 日期函數(shù)CAST 和 CONVERT 以及在業(yè)務(wù)中的使用介紹
更新時(shí)間:2013年01月17日 10:37:10 作者:
。最近時(shí)間剛從客戶端轉(zhuǎn)入后臺(tái)寫服務(wù),對(duì)于后臺(tái)數(shù)據(jù)庫(kù)以及服務(wù)的書寫完全是個(gè)小白,所以最近寫的肯定沒(méi)有太多技術(shù)含量
最近時(shí)間剛從客戶端轉(zhuǎn)入后臺(tái)寫服務(wù),對(duì)于后臺(tái)數(shù)據(jù)庫(kù)以及服務(wù)的書寫完全是個(gè)小白,所以最近寫的肯定沒(méi)有太多技術(shù)含量。
首先把遇到的問(wèn)題擺出來(lái):還是那張錯(cuò)誤上報(bào)表,字段主要有上報(bào)錯(cuò)誤ID(ErrorID),上報(bào)人(ReportPerson),上報(bào)時(shí)間(ReportTime)精確到毫秒,現(xiàn)在要做的統(tǒng)計(jì)是:(1)統(tǒng)計(jì)一定時(shí)間內(nèi)【起止時(shí)間精確到毫秒】(beginTime,endTime)每個(gè)人每天上報(bào)的錯(cuò)誤個(gè)數(shù)(2)統(tǒng)計(jì)一定時(shí)間內(nèi)【起止時(shí)間到精確到月】(beginTime,endTime)按月統(tǒng)計(jì)每個(gè)人上報(bào)的錯(cuò)誤總數(shù)。
看到問(wèn)題首先想到的是要group by ReportPerson,能將每個(gè)人的統(tǒng)計(jì)數(shù)據(jù)計(jì)算出來(lái),但是還沒(méi)達(dá)到要求,還需要獲得每個(gè)人每天的統(tǒng)計(jì)數(shù)據(jù),對(duì)于我這樣的菜鳥來(lái)說(shuō)就有點(diǎn)麻煩了,不知道該怎么下手了,在sql群里找了個(gè)高手,告訴需要把規(guī)定一下時(shí)間格式,然后把時(shí)間格式限定到天和月,這兩個(gè)問(wèn)題就解決了。
上篇已經(jīng)將多個(gè)時(shí)間函數(shù)羅列了出來(lái),現(xiàn)在就本文章中用到的CAST 和 CONVERT詳細(xì)介紹一下:
先看一下他們的語(yǔ)法:
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
其中:
expression: 任何有效的表達(dá)式。
data_type: 目標(biāo)數(shù)據(jù)類型。 這包括 xml、bigint 和 sql_variant。 不能使用別名數(shù)據(jù)類型。
length: 指定目標(biāo)數(shù)據(jù)類型長(zhǎng)度的可選整數(shù)。 默認(rèn)值為 30。
style: 指定 CONVERT 函數(shù)如何轉(zhuǎn)換 expression 的整數(shù)表達(dá)式。 如果樣式為 NULL,則返回 NULL。 該范圍是由 data_type 確定的。
和本文相關(guān)的主要是length和expression,length是指目標(biāo)類型的長(zhǎng)度,用于限制時(shí)間的精度,expression是用來(lái)限定輸出時(shí)間的格式例如:yyyy/mm/dd/yyyy-mm-dd等。
express的相關(guān)的知識(shí)以及舉例使用可參考下這篇博文:
http://www.dbjr.com.cn/article/33330.htm
現(xiàn)在就用這些知識(shí)解決我的我的問(wèn)題,首先是按日統(tǒng)計(jì)上報(bào)量,精確到日 時(shí)間限制為:CONVERT(varchar(11) , ReportTime , 20 ) 即yyyy-mm-dd
然后利用group by 問(wèn)題就得到了解決,sql 代碼為:
select ReportPerson,CONVERT(varchar(11) , ReportTime , 20 ) as 'ReporTime', count(*) as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-15 12:11:12.23')and (ReportTime<'2013-1-16 12:11:12.23') group by ReportPerson,CONVERT(varchar(11) , ReportTime , 20 )
執(zhí)行結(jié)果為:
select ReportPerson,CONVERT(varchar(7) , ReportTime , 20 ) as 'ReportTime', count(*) as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-1')and (ReportTime<'2013-2-1') group by ReportPerson,CONVERT(varchar(7) , ReportTime , 20 )
執(zhí)行結(jié)果為:
首先把遇到的問(wèn)題擺出來(lái):還是那張錯(cuò)誤上報(bào)表,字段主要有上報(bào)錯(cuò)誤ID(ErrorID),上報(bào)人(ReportPerson),上報(bào)時(shí)間(ReportTime)精確到毫秒,現(xiàn)在要做的統(tǒng)計(jì)是:(1)統(tǒng)計(jì)一定時(shí)間內(nèi)【起止時(shí)間精確到毫秒】(beginTime,endTime)每個(gè)人每天上報(bào)的錯(cuò)誤個(gè)數(shù)(2)統(tǒng)計(jì)一定時(shí)間內(nèi)【起止時(shí)間到精確到月】(beginTime,endTime)按月統(tǒng)計(jì)每個(gè)人上報(bào)的錯(cuò)誤總數(shù)。
看到問(wèn)題首先想到的是要group by ReportPerson,能將每個(gè)人的統(tǒng)計(jì)數(shù)據(jù)計(jì)算出來(lái),但是還沒(méi)達(dá)到要求,還需要獲得每個(gè)人每天的統(tǒng)計(jì)數(shù)據(jù),對(duì)于我這樣的菜鳥來(lái)說(shuō)就有點(diǎn)麻煩了,不知道該怎么下手了,在sql群里找了個(gè)高手,告訴需要把規(guī)定一下時(shí)間格式,然后把時(shí)間格式限定到天和月,這兩個(gè)問(wèn)題就解決了。
上篇已經(jīng)將多個(gè)時(shí)間函數(shù)羅列了出來(lái),現(xiàn)在就本文章中用到的CAST 和 CONVERT詳細(xì)介紹一下:
先看一下他們的語(yǔ)法:
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
其中:
expression: 任何有效的表達(dá)式。
data_type: 目標(biāo)數(shù)據(jù)類型。 這包括 xml、bigint 和 sql_variant。 不能使用別名數(shù)據(jù)類型。
length: 指定目標(biāo)數(shù)據(jù)類型長(zhǎng)度的可選整數(shù)。 默認(rèn)值為 30。
style: 指定 CONVERT 函數(shù)如何轉(zhuǎn)換 expression 的整數(shù)表達(dá)式。 如果樣式為 NULL,則返回 NULL。 該范圍是由 data_type 確定的。
和本文相關(guān)的主要是length和expression,length是指目標(biāo)類型的長(zhǎng)度,用于限制時(shí)間的精度,expression是用來(lái)限定輸出時(shí)間的格式例如:yyyy/mm/dd/yyyy-mm-dd等。
express的相關(guān)的知識(shí)以及舉例使用可參考下這篇博文:
http://www.dbjr.com.cn/article/33330.htm
現(xiàn)在就用這些知識(shí)解決我的我的問(wèn)題,首先是按日統(tǒng)計(jì)上報(bào)量,精確到日 時(shí)間限制為:CONVERT(varchar(11) , ReportTime , 20 ) 即yyyy-mm-dd
然后利用group by 問(wèn)題就得到了解決,sql 代碼為:
復(fù)制代碼 代碼如下:
select ReportPerson,CONVERT(varchar(11) , ReportTime , 20 ) as 'ReporTime', count(*) as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-15 12:11:12.23')and (ReportTime<'2013-1-16 12:11:12.23') group by ReportPerson,CONVERT(varchar(11) , ReportTime , 20 )
執(zhí)行結(jié)果為:
復(fù)制代碼 代碼如下:
select ReportPerson,CONVERT(varchar(7) , ReportTime , 20 ) as 'ReportTime', count(*) as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-1')and (ReportTime<'2013-2-1') group by ReportPerson,CONVERT(varchar(7) , ReportTime , 20 )
執(zhí)行結(jié)果為:
相關(guān)文章
清空MSSQL日志 與set recovery simple
清空MSSQL日志 與set recovery simple...2007-10-10目前用到的兩個(gè)分頁(yè)存儲(chǔ)過(guò)程代碼
前用到的兩個(gè)分頁(yè)存儲(chǔ)過(guò)程,需要的朋友可以參考下。2009-09-09SqlServer類似正則表達(dá)式的字符處理問(wèn)題
這篇文章主要介紹了SqlServer類似正則表達(dá)式的字符處理問(wèn)題,需要的朋友可以參考下2017-10-10詳解SQL Server 中 JSON_MODIFY 的使用
SQL Server 從 2016 開始支持了一些 JSON操作,最近的項(xiàng)目里也是好多地方字段直接存成了 JSON,需要了解一下怎么在SQL Server 中操作 JSON.這篇文章主要介紹了SQL Server 中 JSON_MODIFY 的使用,需要的朋友可以參考下2019-11-11Sql學(xué)習(xí)第一天——SQL 練習(xí)題(建表/sql語(yǔ)句)
來(lái)自Madrid且訂單數(shù)少于3的消費(fèi)者,針對(duì)這個(gè)要求作出以下:建表 做題分析以及sql語(yǔ)句的寫法,感興趣的朋友可以參考下哈,希望可以幫助到你2013-03-03SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢
這篇文章介紹了SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05