观看麻豆影视文化有限公司-国产 高清 在线-国产 日韩 欧美 亚洲-国产 日韩 欧美 综合-日日夜夜免费精品视频-日日夜夜噜

C語(yǔ)言日歷代碼(日歷代碼實(shí)現(xiàn))

  • 生活
  • 2023-04-25 13:16

多條告白如次劇本只需引入一次

前天咱們經(jīng)過(guò)一段代碼展現(xiàn)了怎樣經(jīng)過(guò)Python的Pandas包天生一個(gè)日歷表,即使諸位感愛(ài)好不妨參考:經(jīng)過(guò)Pandas天生日歷表;

不得不說(shuō)在DBEngine(https://db-engines.com/en/ranking)排行榜中,PostgreSQL邇來(lái)幾年從來(lái)都很寧?kù)o,而且在各個(gè)云平臺(tái)中都有特殊老練的PaaS產(chǎn)物供各個(gè)企業(yè)運(yùn)用,那么咱們即日的目的即是演練一下怎樣經(jīng)過(guò)#postgresql#來(lái)天生一致的日歷表。

正文運(yùn)用的PostgreSQL本子為14.1,WindowsServer2016情況下運(yùn)轉(zhuǎn)。

DBEngineRanking

少許要害的功效

GENERATE_SERIES

在實(shí)行處置計(jì)劃之前,咱們先領(lǐng)會(huì)PostgreSQL的一個(gè)因變量:“GENERATE_SERIES”,經(jīng)過(guò)字面道理該當(dāng)能大概猜出來(lái),這個(gè)因變量不妨天生一個(gè)序列的數(shù)據(jù),直白講即是天生單列的一個(gè)數(shù)據(jù)表。

咱們先經(jīng)過(guò)psql吩咐獲得對(duì)于此因變量的刻畫,如次圖所示:

GENERATE_SERIESDescriptioninpsql

此因變量重要有幾個(gè)特性:

不妨歸來(lái)整型(bigint,int),浮點(diǎn)典型(numeric)序列;不妨歸來(lái)帶時(shí)區(qū)的功夫戳典型(timestamp)序列;不妨歸來(lái)不帶時(shí)區(qū)的功夫戳典型(timestamp)序列;大略舉個(gè)例子:

1.1歸來(lái)整型序列

當(dāng)指定開始,盡頭參數(shù)SELECTGENERATE_SERIES(1,10);截止如次所示:

歸來(lái)整型序列

當(dāng)指定開始,盡頭,步長(zhǎng)參數(shù)步長(zhǎng)不妨領(lǐng)會(huì)為騰躍值,從1發(fā)端,即使步長(zhǎng)為2,那么下一個(gè)數(shù)字該當(dāng)是1+2=3,以該類推;

SELECTGENERATE_SERIES(1,10,2);歸來(lái)整型序列,指定步長(zhǎng)

1.2歸來(lái)浮點(diǎn)典型序列

此功效一致于歸來(lái)整型序列,各別點(diǎn)是傳入的不妨是帶少量位的浮點(diǎn)典型數(shù)據(jù),如次圖所示:

SELECTGENERATE_SERIES(1.1,10.9,0.5);歸來(lái)浮點(diǎn)典型序列,指定步長(zhǎng)

1.3歸來(lái)功夫戳(timestamp)序列

此功效不妨經(jīng)過(guò)指定開始,盡頭和步長(zhǎng)征三號(hào)個(gè)參數(shù),歸來(lái)一段功夫戳的序列數(shù)據(jù),如次圖所示:

SELECTGENERATE_SERIES('2022-01-01'::TIMESTAMP,'2022-01-31'::TIMESTAMP,'1DAY')ASdatum;歸來(lái)功夫戳序列

須要提防的是:

必需同聲指定三個(gè)參數(shù),開始,盡頭,步長(zhǎng);開始和盡頭參數(shù),必需是功夫戳典型(timestamp),即使傳入的是日子典型,須要表露變換;步長(zhǎng)不妨是鐘點(diǎn),秒鐘,秒,天,禮拜,年等;日子典型數(shù)據(jù)操縱

咱們須要記取這一個(gè)操縱:日子+平頭=日子,如底下例子所示:

date+integer→dateAddanumberofdaystoadatedate'2022-01-09'+5→2022-01-14Case1:當(dāng)月計(jì)劃

Case2:跨月計(jì)劃

底下咱們貫串GENERATE_SERIES因變量實(shí)行怎樣獲得一個(gè)日子典型的序列;

開始:2022-01-01,盡頭:2022-01-31;這兩個(gè)功夫點(diǎn)中央間隙了30天,經(jīng)過(guò)代碼實(shí)行如次:

SELECT'2022-01-01'::DATE+s.aASdatumFROMGENERATE_SERIES(0,30)ASs(a);截止如次圖所示:

經(jīng)過(guò)GENERATE_SERIES因變量歸來(lái)日子典型序列

這種計(jì)劃的上風(fēng)是:

歸來(lái)日子典型序列,原因變量?jī)H扶助傳時(shí)髦間戳典型數(shù)據(jù);不須要按日子功夫的Interval指定功夫間隙,將功夫間隙默許為1天。自設(shè)置因變量

經(jīng)過(guò)上頭的熟習(xí),咱們?nèi)耘f不妨經(jīng)過(guò)傳入發(fā)端日子和間隙天數(shù)獲得咱們想要的截止。然而即使交易上常常變幻發(fā)端日子和功夫間隙,咱們還須要連接的重寫SQL語(yǔ)句。為了制止從新改寫SQL語(yǔ)句,咱們將設(shè)置一個(gè)因變量“get_calendar”,并將“發(fā)端日子”(start_dt)和“功夫間隙”(days)做為參數(shù)字傳送入,進(jìn)而使咱們的截止和語(yǔ)句越發(fā)精巧。

代碼如次所示:

CREATEORREPLACEFUNCTIONpublic.get_calendar(start_dtdate,daysinteger)RETURNSTABLE(datumdate)LANGUAGE'sql'AS$BODY$SELECTstart_dt+s.aASdatumFROMGENERATE_SERIES(0,days)ASs(a)GROUPBYs.aORDERBY1;$BODY$;大略嘗試一下,仍舊將‘2022-01-01’動(dòng)作發(fā)端日子,功夫間隙樹立為30天:

SELECT*FROMget_calendar('2022-01-01',30);自設(shè)置因變量讓代碼越發(fā)精巧

完備代碼實(shí)行

最后,咱們將經(jīng)過(guò)PostgreSQL的洪量日子和字符串變換因變量,擴(kuò)充咱們的自設(shè)置因變量“get_calendar”,獲得一個(gè)完備的日歷表,簡(jiǎn)直代碼如次所示。

/*Author:DerekZhuDate:2022-01-08Purpose:CalendartablepracticeinPostgreSQL14.1Description:Startdate:2022-01-01Setdayslengthin2ndargumentof'Genarate_series'function*/--FUNCTION:public.get_calendar(date,integer)--DROPFUNCTIONIFEXISTSpublic.get_calendar(date,integer);CREATEORREPLACEFUNCTIONpublic.get_calendar(start_dtdate,daysinteger)RETURNSTABLE(datumdate,yearnumeric,monthnumeric,day_of_monthnumeric,week_of_yearnumeric,iso_day_of_weeknumeric,year_calendar_weektext,day_of_yearnumeric,quarter_of_yearnumeric,quartaltext,year_quartaltext,day_nametext,month_nametext,year_monthtext,year_halfinteger,leap_yearboolean,weekendtext,cw_startdate,cw_enddate,month_startdate,month_enddate)LANGUAGE'sql'COST100VOLATILEPARALLELUNSAFEROWS1000AS$BODY$SELECTdatum,EXTRACT(YEARFROMdatum)AS"year",EXTRACT(MONTHFROMdatum)AS"month",EXTRACT(DAYFROMdatum)ASday_of_month,EXTRACT(WEEKFROMdatum)ASweek_of_year,--ISO8601dayoftheweeknumbering,ThedayoftheweekasMonday(1)toSunday(7)EXTRACT(ISODOWFROMdatum)ASiso_day_of_week,--StandardGregoriandayoftheweeknumbering,ThedayoftheweekasSunday(0)toSaturday(6)--EXTRACT(DOWFROMdatum)ASday_of_week,--ISOcalendaryearandweekTO_CHAR(datum,'iyyy/IW')ASyear_calendar_week,EXTRACT(DOYFROMdatum)ASday_of_year,EXTRACT(QUARTERFROMdatum)ASquarter_of_year,'Q'||TO_CHAR(datum,'Q')ASquartal,TO_CHAR(datum,'yyyy/"Q"Q')ASyear_quartal,TO_CHAR(datum,'TMDay')ASday_name,TO_CHAR(datum,'TMMonth')ASmonth_name,TO_CHAR(datum,'yyyy/mm')ASyear_month,--HalfyearCASEWHENEXTRACT(MONTHFROMdatum)<7THEN1ELSE2ENDASyear_half,--LeapyearCASEWHENEXTRACT(YEARFROMdatum)%4=0THENTRUEELSEFALSEENDASleap_year,--WeekendCASEWHENEXTRACT(ISODOWFROMdatum)in(6,7)THEN'Weekend'ELSE'Weekday'ENDASweekend,--ISOstartandendoftheweekofthisdatedatum+(1-EXTRACT(ISODOWFROMdatum))::integerAScw_start,datum+(7-EXTRACT(ISODOWFROMdatum))::integerAScw_end,--Startandendofthemonthofthisdatedatum+(1-EXTRACT(DAYFROMdatum))::integerASmonth_start,((datum+(1-EXTRACT(DAYFROMdatum))::integer+'1month'::interval)::date-'1day'::interval)::DATEASmonth_endFROM(SELECTstart_dt+s.aASdatumFROMGENERATE_SERIES(0,days)ASs(a)GROUPBYs.a)AScalendarORDERBY1;$BODY$;ALTERFUNCTIONpublic.get_calendar(date,integer)OWNERTOpostgres;獲得2022年終年日歷,如次所示:

SELECT*FROMget_calendar('2022-01-01',364);2022CalendarTable

經(jīng)過(guò)文本編纂器查看截止,如次所示:

Calendardataincsv

經(jīng)過(guò)Excel查看截止,如次所示:

Calendardatainexcel

至此,咱們?nèi)耘f實(shí)行了一切功效;

歸納

經(jīng)過(guò)PostgreSQL天生日歷表重要有底下幾個(gè)提防點(diǎn):

ISO8601規(guī)范中,一個(gè)禮拜的天數(shù)為:Monday(1)~Sunday(7);領(lǐng)會(huì)并精巧運(yùn)用GENERATE_SERIES因變量天生日子序列;養(yǎng)成模塊化思想風(fēng)氣,將通用的數(shù)據(jù)操縱籠統(tǒng)為因變量或本領(lǐng),不妨擴(kuò)充運(yùn)用范疇;與前天經(jīng)過(guò)PythonPandas的案例一律,咱們最后也將處置計(jì)劃?

猜你喜歡

主站蜘蛛池模板: 香港三级日本三级妇人三级 | 怡红院爽妇网 | 国产高清国产专区国产精品 | 国产欧美亚洲精品一区 | 黄网免费 | 久久精品免费一区二区三区 | 午夜在线观看cao | 国产护士一级毛片高清 | 在线视频一二三区 | 日韩精品在线播放 | 日本高清久久 | 欧美满嘴射 | 精品国产区一区二区三区在线观看 | 一级做a爱过程免费观看 | 色综合加勒比 | 521a久久九九久久精品 | 国产精品极品 | 国产一级大片免费看 | 成人在线中文字幕 | 欧美一级毛片免费看视频 | 久久久在线视频精品免费观看 | 久热香蕉在线视频 | 亚洲国产大片 | 日本黄页网站免费大全 | 欧美特级午夜一区二区三区 | 久久午夜影院 | 久久久久久国产精品免费 | 欧美不卡视频 | 国产精品合集久久久久青苹果 | 午夜三级成人三级 | 99热官网 | 国产丶欧美丶日韩丶不卡影视 | 国产性夜夜春夜夜爽30 | 黄色三级网站在线观看 | 欧美一级特黄aaaaaa在线看首页 | 亚洲香蕉一区二区三区在线观看 | 日韩欧美亚洲每的更新在线 | 国产精品一区二区综合 | 天天澡天天碰天天狠伊人五月 | 亚洲国产成人久久综合野外 | 91精品国产综合久久青草 |