{"id":5433,"date":"2023-12-04T06:55:00","date_gmt":"2023-12-04T05:55:00","guid":{"rendered":"https:\/\/expert-only.com\/?p=5433"},"modified":"2022-12-08T14:14:33","modified_gmt":"2022-12-08T13:14:33","slug":"diferenca-entre-datas-com-sql-server","status":"publish","type":"post","link":"https:\/\/expert-only.com\/pt-pt\/t-sql\/diferenca-entre-datas-com-sql-server\/","title":{"rendered":"Diferen\u00e7a entre duas datas com SQL Server em horas, minutos e segundos"},"content":{"rendered":"\n<p>Como calcular a diferen\u00e7a entre duas datas com SQL Server em horas minutos ou segundos no SQL Server? A fun\u00e7\u00e3o DATEDIFF() do SQL Server permite-nos calcular a diferen\u00e7a entre dois carimbos temporais, mas apenas numa unidade.<\/p>\n\n\n\n<p>Por exemplo, apenas em segundos, ou apenas em minutos ou apenas em horas. Assim, calcular a diferen\u00e7a entre uma data de in\u00edcio e uma data de fim n\u00e3o \u00e9 simples com o SQL Server. Este post mostra-lhe como faz\u00ea-lo com uma simples consulta de exemplo, explicada passo a passo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-consultas-t-sql-para-calcular-a-diferenca-entre-datas\">Consultas T-SQL para calcular a diferen\u00e7a entre datas<\/h2>\n\n\n\n<p>Como exemplo, esta simples consulta SQL est\u00e1 a utilizar DATEDIFF() com dois timestamps com exactamente uma hora de diferen\u00e7a. E cada consulta d\u00e1 apenas uma unidade. Assim, basicamente, temos de combinar ou concatenar v\u00e1rias consultas para obter as horas, minutos e segundos dentro de uma \u00fanica consulta SQL. Abaixo de cada consulta \u00e9 devolvida uma unidade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Calcular a diferen\u00e7a de tempo em horas minutos e segundos<\/h2>\n\n\n\n<p>As consultas abaixo mostram 3 tipos diferentes de resultados. No entanto, cada unidade de tempo n\u00e3o \u00e9 um tempo, mas apenas uma \u00fanica unidade. Portanto, \u00e9 obrigat\u00f3rio concaten\u00e1-los e convert\u00ea-los.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Primeiro, calcular a diferen\u00e7a em <strong>segundos<\/strong><\/li>\n\n\n\n<li>Depois <strong>minutos<\/strong><\/li>\n\n\n\n<li>Duram as <strong>horas<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Declare e inicialize duas vari\u00e1veis com exactamente uma hora de diferen\u00e7a: 9 - 8 = 1h \nDECLARE @DateStart  DATETIME\nDECLARE @DateEnd    DATETIME\nSET @DateStart  = '2017-03-10 08:00:00'\nSET @DateEnd    = '2017-03-10 09:00:00'\n\n-- SQL Query retorna a diferen\u00e7a em segundos : 3600 segundos\nSELECT DATEDIFF(SECOND, @DateStart, @DateEnd) AS [Difference in Seconds]\n\n-- SQL Query retorna a diferen\u00e7a em minutos : 60 minutos\nSELECT DATEDIFF(MINUTE, @DateStart, @DateEnd) AS [Difference in Minutes]\n\n-- SQL Query retorna a diferen\u00e7a em horas : 1 hora\nSELECT DATEDIFF(HOUR, @DateStart, @DateEnd) AS [Difference in Hours]\n<\/pre>\n\n\n\n<p>Abaixo est\u00e3o duas formas diferentes de calcular a diferen\u00e7a hor\u00e1ria entre duas datas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Diferen\u00e7a entre duas datas numa \u00fanica consulta T-SQL<\/h2>\n\n\n\n<p>Para obter a diferen\u00e7a em horas, minutos e segundos, utilize esta consulta, ela s\u00f3 funciona se as horas forem inferiores a 99. Este c\u00f3digo utiliza a <a href=\"https:\/\/docs.aws.amazon.com\/pt_br\/redshift\/latest\/dg\/r_LEFT.html\" target=\"_blank\" rel=\"noreferrer noopener\">fun\u00e7\u00e3o de texto RIGHT<\/a>. Alterar o total em segundos em Horas, Minutos e Segundos, por exemplo com 3 horas = 3600 * 3 = 14400.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DECLARE @TimeInSeconds INT\nSET    @TimeInSeconds = 14400\n\nSELECT\nRIGHT('0' + CAST(@TimeInSeconds \/ 3600 AS VARCHAR),2) + ':' +\nRIGHT('0' + CAST((@TimeInSeconds \/ 60) % 60 AS VARCHAR),2) + ':' +\nRIGHT('0' + CAST(@TimeInSeconds % 60 AS VARCHAR),2);\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3. Diferen\u00e7a entre duas datas com uma consulta SQL Server<\/h2>\n\n\n\n<p>Estas consultas SQL calculam a diferen\u00e7a de tempo usando primeiro os segundos (multiplicado por uma hora em segundos \u00e9 60 * 60 = 3600. Depois utilizando os milisegundos (multiplicado por uma hora em milisegundos como 60 * 60 * 1000 = 3600 * 1000 ).<\/p>\n\n\n\n<p>Finalmente mostra o resultado sem os milissegundos usando a fun\u00e7\u00e3o CONVERT() e o formato de data de dados 108.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Usando os segundos como base para a convers\u00e3o\nselect CONVERT(varchar, dateadd(s, 3 * 3600 , getdate()), 108) AS [Horas Minutos Segundos]\n\n-- Usando os milissegundos como base para a convers\u00e3o\nselect CONVERT(varchar, dateadd(ms, 3 * 3600 * 1000, getdate()), 108) AS [Horas Minutos Segundos]\n<\/pre>\n\n\n\n<p>Neste tutorial vimos como calcular uma diferen\u00e7a entre duas datas com SQL Server em horas minutos e segundos. Aqui est\u00e1 a documenta\u00e7\u00e3o oficial do Microsoft SQL Server sobre a fun\u00e7\u00e3o de tempo DATEADD(). Aqui est\u00e1 um tutorial para aprender a <a href=\"https:\/\/expert-only.com\/pt-pt\/ms-dos\/copiar-recursivamente-ficheiros-cmd\/\">copiar recursivamente ficheiros<\/a> a partir da linha de comando.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-tutoriais-sql-e-ti wp-block-embed-tutoriais-sql-e-ti\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"cGyO5F6uND\"><a href=\"https:\/\/expert-only.com\/pt-pt\/ms-dos\/copiar-recursivamente-ficheiros-cmd\/\">Copiar recursivamente ficheiros com cmd<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Copiar recursivamente ficheiros com cmd&#8221; &#8212; Tutoriais SQL e TI\" src=\"https:\/\/expert-only.com\/pt-pt\/ms-dos\/copiar-recursivamente-ficheiros-cmd\/embed\/#?secret=ZWWc7m7B1p#?secret=cGyO5F6uND\" data-secret=\"cGyO5F6uND\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><strong>Foi \u00fatil para si? Se sim, por favor use-a e partilhe-a!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Como calcular a diferen\u00e7a entre duas datas com SQL Server em horas minutos ou segundos no SQL Server? A fun\u00e7\u00e3o DATEDIFF() do SQL Server permite-nos calcular a diferen\u00e7a entre dois carimbos temporais, mas apenas numa unidade. Por exemplo, apenas <a class=\"mh-excerpt-more\" href=\"https:\/\/expert-only.com\/pt-pt\/t-sql\/diferenca-entre-datas-com-sql-server\/\" title=\"Diferen\u00e7a entre duas datas com SQL Server em horas, minutos e segundos\">&#8230;<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":5526,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[454],"tags":[],"class_list":{"0":"post-5433","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-t-sql"},"_links":{"self":[{"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/posts\/5433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=5433"}],"version-history":[{"count":0,"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/posts\/5433\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/media\/5526"}],"wp:attachment":[{"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=5433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=5433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/expert-only.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=5433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}