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

C語言日歷代碼(日歷代碼實現)

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

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

前天咱們經過一段代碼展現了怎樣經過Python的Pandas包天生一個日歷表,即使諸位感愛好不妨參考:經過Pandas天生日歷表;

不得不說在DBEngine(https://db-engines.com/en/ranking)排行榜中,PostgreSQL邇來幾年從來都很寧靜,而且在各個云平臺中都有特殊老練的PaaS產物供各個企業運用,那么咱們即日的目的即是演練一下怎樣經過#postgresql#來天生一致的日歷表。

正文運用的PostgreSQL本子為14.1,WindowsServer2016情況下運轉。

DBEngineRanking

少許要害的功效

GENERATE_SERIES

在實行處置計劃之前,咱們先領會PostgreSQL的一個因變量:“GENERATE_SERIES”,經過字面道理該當能大概猜出來,這個因變量不妨天生一個序列的數據,直白講即是天生單列的一個數據表。

咱們先經過psql吩咐獲得對于此因變量的刻畫,如次圖所示:

GENERATE_SERIESDescriptioninpsql

此因變量重要有幾個特性:

不妨歸來整型(bigint,int),浮點典型(numeric)序列;不妨歸來帶時區的功夫戳典型(timestamp)序列;不妨歸來不帶時區的功夫戳典型(timestamp)序列;大略舉個例子:

1.1歸來整型序列

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

歸來整型序列

當指定開始,盡頭,步長參數步長不妨領會為騰躍值,從1發端,即使步長為2,那么下一個數字該當是1+2=3,以該類推;

SELECTGENERATE_SERIES(1,10,2);歸來整型序列,指定步長

1.2歸來浮點典型序列

此功效一致于歸來整型序列,各別點是傳入的不妨是帶少量位的浮點典型數據,如次圖所示:

SELECTGENERATE_SERIES(1.1,10.9,0.5);歸來浮點典型序列,指定步長

1.3歸來功夫戳(timestamp)序列

此功效不妨經過指定開始,盡頭和步長征三號個參數,歸來一段功夫戳的序列數據,如次圖所示:

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

須要提防的是:

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

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

date+integer→dateAddanumberofdaystoadatedate'2022-01-09'+5→2022-01-14Case1:當月計劃

Case2:跨月計劃

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

開始:2022-01-01,盡頭:2022-01-31;這兩個功夫點中央間隙了30天,經過代碼實行如次:

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

經過GENERATE_SERIES因變量歸來日子典型序列

這種計劃的上風是:

歸來日子典型序列,原因變量僅扶助傳時髦間戳典型數據;不須要按日子功夫的Interval指定功夫間隙,將功夫間隙默許為1天。自設置因變量

經過上頭的熟習,咱們仍舊不妨經過傳入發端日子和間隙天數獲得咱們想要的截止。然而即使交易上常常變幻發端日子和功夫間隙,咱們還須要連接的重寫SQL語句。為了制止從新改寫SQL語句,咱們將設置一個因變量“get_calendar”,并將“發端日子”(start_dt)和“功夫間隙”(days)做為參數字傳送入,進而使咱們的截止和語句越發精巧。

代碼如次所示:

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’動作發端日子,功夫間隙樹立為30天:

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

完備代碼實行

最后,咱們將經過PostgreSQL的洪量日子和字符串變換因變量,擴充咱們的自設置因變量“get_calendar”,獲得一個完備的日歷表,簡直代碼如次所示。

/*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

經過文本編纂器查看截止,如次所示:

Calendardataincsv

經過Excel查看截止,如次所示:

Calendardatainexcel

至此,咱們仍舊實行了一切功效;

歸納

經過PostgreSQL天生日歷表重要有底下幾個提防點:

ISO8601規范中,一個禮拜的天數為:Monday(1)~Sunday(7);領會并精巧運用GENERATE_SERIES因變量天生日子序列;養成模塊化思想風氣,將通用的數據操縱籠統為因變量或本領,不妨擴充運用范疇;與前天經過PythonPandas的案例一律,咱們最后也將處置計劃?

猜你喜歡

主站蜘蛛池模板: 国产一级毛片卡 | 亚洲精品一区二区三区四 | 最新亚洲精品 | 欧美另类精品 | 亚洲精品国产综合99久久一区 | 成年女人aaaaa毛片 | 玖玖国产在线 | 国产亚洲精品一区999 | 在线亚洲精品国产波多野结衣 | 成年大片免费视频播放二级 | 亚洲国产精 | 欧美成人性性 | 欧美一级成人影院免费的 | 成人区在线观看免费视频 | 91久久香蕉 | 波多野结衣在线观看免费区 | 欧美黄色高清 | 性欧美一级毛片 | 亚洲精品日韩中文字幕久久久 | 久久黄色影院 | 美女免费黄视频 | 国产精品夜色视频一区二区 | 久久高清精品 | 看全色黄大色黄大片毛片 | 亚洲久久网站 | 亚洲三级网 | 九九精品视频一区在线 | 精品国产一区二区三区免费看 | 国产伦久视频免费观看视频 | 亚洲在线视频播放 | 国产日韩免费 | 狠狠色狠狠色综合久久第一次 | 特级毛片aaaa免费观看 | 久久国产精品1区2区3区网页 | 国产精品黄在线观看免费软件 | 国产成人免费午夜性视频 | 中日韩精品视频在线观看 | 精品免费国产一区二区三区 | 911精品国产亚洲日本美国韩国 | 国产亚洲欧美在线播放网站 | 日韩在线小视频 |