{"id":2260,"date":"2023-08-04T16:28:48","date_gmt":"2023-08-04T19:28:48","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=2260"},"modified":"2023-08-07T10:43:30","modified_gmt":"2023-08-07T13:43:30","slug":"pegando-o-primeiro-dia-do-mes-de-uma-determinada-data","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/banco-de-dados\/pegando-o-primeiro-dia-do-mes-de-uma-determinada-data\/","title":{"rendered":"Pegando o primeiro dia do m\u00eas de uma determinada data"},"content":{"rendered":"<p>Vez ou outra em psql precisamos de uma fun\u00e7\u00e3o que retorne o primeiro e o \u00faltimo dia do m\u00eas de uma determinada data. Isso parece simples, afinal sabemos que o inicio do m\u00eas ser\u00e1 sempre ser\u00e1 o dia \u201901\u2019, muito diferente do \u00faltimo dia do m\u00eas que pode variar conforme o m\u00eas e o ano. Na fun\u00e7\u00e3o abaixo criamos uma fun\u00e7\u00e3o que retornar\u00e1 o primeiro dia do m\u00eas de uma determinada data e retorne em formato do tipo timestamp. Essa fun\u00e7\u00e3o trabalhar\u00e1 em conjunto com a fun\u00e7\u00e3o tamb\u00e9m explicada em outro artigo chamada de  <a href=\"https:\/\/gladiston.net.br\/en\/banco-de-dados\/pegando-o-ultimo-dia-do-mes-de-uma-determinada-data\/\" title=\"Pegando o ultimo dia do m\u00eas de uma determinada data\">GET_LAST_DAY_OF_MONTH<\/a>.<\/p>\n\n\n\n<p>Se j\u00e1 teve uma necessidade assim, a fun\u00e7\u00e3o psql abaixo ir\u00e1 resolver seu problema:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">create or alter function GET_FIRST_DAY_OF_MONTH (\n    P_DATE_REF timestamp)\nreturns timestamp\nas\ndeclare variable LCALC_DATE timestamp;\nbegin\n  -- Calcula o inicio do mes da data informado\n  lcalc_date=:P_DATE_REF;\n  select cast(:P_DATE_REF as date) - extract(day from cast(:P_DATE_REF as date)) + 1\n  from RDB$DATABASE\n  into :lcalc_date;\n\n  return :lcalc_date;\nend<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Modo de usar<\/h2>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">select\n  GET_FIRST_DAY_OF_MONTH(current_timestamp) as primeiro_dia_do_mes \nfrom RDB$DATABASE<\/pre><\/div>\n\n\n\n<p>Imagine pesquisar um per\u00edodo de fechamento do m\u00eas atual:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">select * from tabela a\nwhere \n  a.dt_lancamento between \n    GET_FIRST_DAY_OF_MONTH(current_timestamp)\n      and \n    GET_LAST_DAY_OF_MONTH(current_timestamp) <\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Fun\u00e7\u00f5es para pegar o inicio e o fim do m\u00eas podem parecer bobagem no inicio, mas confie em mim, programando com psql voc\u00ea ter\u00e1 momentos em que precisar\u00e1 dessas datas para processar algo importante que deva ser contado a partir do inicio do m\u00eas, at\u00e9 o t\u00e9rmino dele ou ambos. Por exemplo, considere a possibilidade de consultar lan\u00e7amentos de um per\u00edodo mensal, onde ir\u00e1 do dia 01 at\u00e9 o final do m\u00eas incluindo o sufixo de hora 23:59:59 para n\u00e3o perder os movimentos desde ultimo dia. O fato da fun\u00e7\u00e3o retornar um timestamp vai te ajudar inclusive com o indice que n\u00e3o precisar\u00e1 dum cast de timestamp para date.<\/p>","protected":false},"excerpt":{"rendered":"<p>Vez ou outra em psql precisamos de uma fun\u00e7\u00e3o que retorne o primeiro e o \u00faltimo dia do m\u00eas de uma determinada data. Isso parece simples, afinal sabemos que o inicio do m\u00eas ser\u00e1 sempre ser\u00e1 o dia \u201901\u2019, muito diferente do \u00faltimo dia do m\u00eas que pode variar conforme o m\u00eas e o ano. [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":1109,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-2260","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/2260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=2260"}],"version-history":[{"count":9,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/2260\/revisions"}],"predecessor-version":[{"id":2296,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/2260\/revisions\/2296"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1109"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=2260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}