{"id":4705,"date":"2012-06-22T18:35:25","date_gmt":"2012-06-22T16:35:25","guid":{"rendered":"http:\/\/elclubdelautodidacta.es\/wp\/?p=4705"},"modified":"2012-06-22T18:35:25","modified_gmt":"2012-06-22T16:35:25","slug":"mysql-ha-llegado-la-hora","status":"publish","type":"post","link":"http:\/\/elclubdelautodidacta.es\/wp\/2012\/06\/mysql-ha-llegado-la-hora\/","title":{"rendered":"MySQL &#8211; Ha llegado la hora"},"content":{"rendered":"<p><a href=\"http:\/\/elclubdelautodidacta.es\/wp\/wp-content\/uploads\/2012\/03\/ECDA-mysql-9.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/elclubdelautodidacta.es\/wp\/wp-content\/uploads\/2012\/03\/ECDA-mysql-9.jpg\" alt=\"\" title=\"ECDA-mysql-9\" width=\"191\" height=\"255\" class=\"alignleft size-full wp-image-3428\" \/><\/a><em><strong>Objetivo<\/strong>: presentar en MySQL el tipo de datos TIME, adecuado tanto para registrar horas como para el tiempo transcurrido entre dos eventos.<\/em><\/p>\n<p>En el art\u00edculo anterior tratamos el <a href=\"http:\/\/elclubdelautodidacta.es\/wp\/2012\/06\/mysql-un-tipo-de-datos-para-almacenar-fechas\/\" title=\"Tipo de datos DATE\">tipo de datos DATE<\/a> para registrar fechas (a\u00f1o, mes y d\u00eda). Aunque, como veremos pronto, existen tambi\u00e9n tipos para indicar fecha y hora en el mismo campo, MySQL dispone de uno espec\u00edfico para almacenar horas: <strong>TIME<\/strong>.<\/p>\n<p>Hay varias maneras de introducir la hora y es preciso conocer algunas sutilezas.<\/p>\n<p>Comencemos por el formato b\u00e1sico:<\/p>\n<p><strong>&#8216;HH:MM:SS&#8217;<\/strong><\/p>\n<p>Indicamos la hora, seguida de los minutos y de los segundos. Por ejemplo:<\/p>\n<p><pre><code class=\"preserve-code-formatting\">&#039;07:30:46&#039;\n&#039;13:46:00&#039;\n&#039;23:59:59&#039;<\/code><\/pre><\/p>\n<p>No olvides las comillas y ten en cuenta que la hora se indica en formato <strong>24 horas<\/strong> (no 12, con <em>am <\/em>y <em>pm<\/em>).<\/p>\n<p>Una hora escrita con sus tres pares (horas, minutos y segundos), puede indicarse tambi\u00e9n sin el delimitador de los <em>dos puntos<\/em>. De este modo, los tres ejemplos anteriores puedes escribirlos as\u00ed:<\/p>\n<p><pre><code class=\"preserve-code-formatting\">&#039;073046&#039;\n&#039;134600&#039;\n&#039;235959&#039;<\/code><\/pre><\/p>\n<p>o incluso como n\u00fameros, sin las comillas:<\/p>\n<p><pre><code class=\"preserve-code-formatting\">073046\n134600\n235959<\/code><\/pre><\/p>\n<p>Si empleamos el delimitador, podemos prescindir de los ceros a la izquierda. Las siguientes horas son equivalentes:<\/p>\n<p><pre><code class=\"preserve-code-formatting\">&#039;05:05:05&#039;\n&#039;5:5:5&#039;<\/code><\/pre><\/p>\n<p>Pero ten presente que, sin delimitadores, esa hora no podr\u00eda escribirse como <code class=\"preserve-code-formatting\">&#039;555&#039;<\/code>, sino &#8216;<code class=\"preserve-code-formatting\">050505&#039;<\/code>.<\/p>\n<p>Tambi\u00e9n podemos expresar horas en formato m\u00e1s corto:<\/p>\n<p><strong>&#8216;HH:MM&#8217;<\/strong><\/p>\n<p><code class=\"preserve-code-formatting\">&#039;13:30&#039;<\/code> es equivalente a <code class=\"preserve-code-formatting\">&#039;13:30:00&#039;<\/code>.<\/p>\n<p>Puedes usar el formato corto sin delimitadores, pero con una precauci\u00f3n importante que puede prestarse a confusi\u00f3n.<\/p>\n<p>Siempre que facilitas una hora sin delimitadores (con comillas o sin ellas) MySQL intenta formar los <strong>pares de derecha a izquierda<\/strong>. Por ejemplo:<\/p>\n<p>&#8216;1330&#8217; es equivalente a <code class=\"preserve-code-formatting\">&#039;00:13:30&#039;<\/code> y <strong>NO<\/strong> <code class=\"preserve-code-formatting\">&#039;13:30:00&#039;<\/code>, como suced\u00eda antes.<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;759&#039;<\/code> es equivalente a <code class=\"preserve-code-formatting\">&#039;00:07:59&#039;<\/code><\/p>\n<p><code class=\"preserve-code-formatting\">&#039;10&#039;<\/code> es equivalente a <code class=\"preserve-code-formatting\">&#039;00:00:10&#039;<\/code>.<\/p>\n<p>Tenlo siempre presente a la <strong>hora<\/strong> de emplear delimitadores o no.<\/p>\n<p>El tipo <strong>TIME <\/strong>puede utilizarse no s\u00f3lo para registrar horas, sino tambi\u00e9n para indicar el espacio de tiempo entre dos sucesos, siempre y cuando entre ellos no existan m\u00e1s de <strong>35 d\u00edas<\/strong>.<\/p>\n<p>35 d\u00edas (aproximadamente), he dicho bien.<\/p>\n<p>Pero, \u00bfc\u00f3mo representamos hasta 35 d\u00edas en un formato HH:MM:SS?<\/p>\n<p><strong>&#8216;HHH:MM:SS&#8217;<\/strong><\/p>\n<p>Es decir, empleando tres cifras para la hora:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;100:45:15&#039;<\/code><\/p>\n<p>que se corresponde a <em>100 horas, cuarenta y cinco minutos y quince segundos.<br \/>\n<\/em><br \/>\nTambi\u00e9n puedes expresar medidas temporales <strong>negativas<\/strong>:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;-100:45:15&#039;<\/code><\/p>\n<p>El rango temporal permitido est\u00e1 comprendido entre  <code class=\"preserve-code-formatting\">-838:59:59<\/code> y <code class=\"preserve-code-formatting\">838:59:59<\/code>.<\/p>\n<p><em>839 horas<\/em> son aproximadamente <em>35 d\u00edas<\/em>.<\/p>\n<p>Este otro formato tambi\u00e9n es v\u00e1lido:<\/p>\n<p><strong>&#8216;D HHH:MM:SS&#8217;<\/strong><\/p>\n<p>donde D representa el n\u00famero de d\u00edas:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;5 15:20:40&#039;<\/code><\/p>\n<p>significa <em>5 d\u00edas, 15 horas, 20 minutos y 40 segundos<\/em>.<\/p>\n<p>O este otro:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;20 100:34:45&#039;<\/code><\/p>\n<p>Pero aunque lo introduzcamos as\u00ed, MySQL nos lo presentar\u00e1 con los d\u00edas pasados a horas:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;580:34:45&#039;<\/code>.<\/p>\n<p>Este otro valor resultar\u00eda en error:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;20 500:00:00&#039;<\/code><\/p>\n<p>ya que, si conviertes los d\u00edas a horas te queda que es equivalente a <\/p>\n<p><code class=\"preserve-code-formatting\">&#039;980:00:00&#039;<\/code><\/p>\n<p>y ya sabes que el l\u00edmite es <\/p>\n<p><code class=\"preserve-code-formatting\">838:59:59<\/code><\/p>\n<p>Empleando d\u00edas tambi\u00e9n est\u00e1 disponible esta otra sintaxis:<\/p>\n<p><strong>&#8216;D HHH&#8217;<\/strong><\/p>\n<p>Por ejemplo,<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;20 5&#039;<\/code><\/p>\n<p>que equivale a <em>20 d\u00edas y 5 horas<\/em>, es decir, lo mismo que:<\/p>\n<p><code class=\"preserve-code-formatting\">&#039;485:00:00&#039;<\/code><\/p>\n<p>Para finalizar, como aplicaci\u00f3n pr\u00e1ctica, vamos a dise\u00f1ar una tabla MySQL, denominada <strong>fichajes<\/strong>, en la que registraremos los fichajes de entrada y salida en una empresa.<\/p>\n<p><pre><code class=\"preserve-code-formatting\">mysql&gt; CREATE TABLE fichajes\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt; (\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt; fecha DATE,\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt; entrada TIME,\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt; salida TIME\n&nbsp;&nbsp;&nbsp;&nbsp;-&gt; );\nQuery OK, 0 rows affected (0.11 sec)<\/code><\/pre><\/p>\n<p><pre><code class=\"preserve-code-formatting\">mysql&gt; DESC fichajes;\n+---------+------+------+-----+---------+-------+\n| Field&nbsp;&nbsp; | Type | Null | Key | Default | Extra |\n+---------+------+------+-----+---------+-------+\n| fecha&nbsp;&nbsp; | date | YES&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; | NULL&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n| entrada | time | YES&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; | NULL&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n| salida&nbsp;&nbsp;| time | YES&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; | NULL&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n+---------+------+------+-----+---------+-------+\n3 rows in set (0.05 sec)<\/code><\/pre><\/p>\n<p>Nada m\u00e1s; son las 18:34:46, <em>hora<\/em> ya de publicar este art\u00edculo&#8230;  <\/p>\n<p><strong><span style=\"color: #808080;\">Javier Montero Gabarr\u00f3<\/span><\/strong><\/p>\n<hr \/>\n<p>http:\/\/elclubdelautodidacta.es\/wp\/2012\/06\/mysql-ha-llegado-la-hora\/<\/p>\n<hr \/>\n<p>El texto de este art\u00edculo se encuentra sometido a una licencia <em>Creative Commons<\/em> del tipo <strong>CC-BY-NC-ND<\/strong> (reconocimiento, no comercial, sin obra derivada, 3.0 unported)<\/p>\n<hr \/>\n<p><em>El Club del Autodidacta<\/em><\/p>\n<hr \/>\n<p>\u00a1Accede al \u00edndice con todos los art\u00edculos sobre <a href=\"http:\/\/elclubdelautodidacta.es\/wp\/indice-mysql\/\" title=\"\u00cdndice MySQL\">MySQL<\/a>!<\/p>\n<div class=\"SPOSTARBUST-Related-Posts\"><H3>Tal vez te interese...<\/H3><ul class=\"entry-meta\"><li class=\"SPOSTARBUST-Related-Post\"><a title=\"Una invitaci\u00f3n a MySQL Workbench\" href=\"http:\/\/elclubdelautodidacta.es\/wp\/2014\/06\/una-invitacion-a-mysql-workbench\/\" rel=\"bookmark\">Una invitaci\u00f3n a MySQL Workbench<\/a><\/li>\n<li class=\"SPOSTARBUST-Related-Post\"><a title=\"MySQL: Polvo somos y en polvo nos convertiremos\" href=\"http:\/\/elclubdelautodidacta.es\/wp\/2012\/12\/mysql-polvo-somos-y-en-polvo-nos-convertiremos\/\" rel=\"bookmark\">MySQL: Polvo somos y en polvo nos convertiremos<\/a><\/li>\n<li class=\"SPOSTARBUST-Related-Post\"><a title=\"MySQL: Modificando los datos de una tabla\" href=\"http:\/\/elclubdelautodidacta.es\/wp\/2012\/08\/mysql-modificando-los-datos-de-una-tabla\/\" rel=\"bookmark\">MySQL: Modificando los datos de una tabla<\/a><\/li>\n<li class=\"SPOSTARBUST-Related-Post\"><a title=\"MySQL: Eliminaci\u00f3n de datos en una tabla\" href=\"http:\/\/elclubdelautodidacta.es\/wp\/2012\/08\/mysql-eliminacion-de-datos-en-una-tabla\/\" rel=\"bookmark\">MySQL: Eliminaci\u00f3n de datos en una tabla<\/a><\/li>\n<li class=\"SPOSTARBUST-Related-Post\"><a title=\"MySQL: Insertando datos sin facilitar todos los campos\" href=\"http:\/\/elclubdelautodidacta.es\/wp\/2012\/07\/mysql-insertando-datos-sin-facilitar-todos-los-campos\/\" rel=\"bookmark\">MySQL: Insertando datos sin facilitar todos los campos<\/a><\/li>\n<\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Objetivo: presentar en MySQL el tipo de datos TIME, adecuado tanto para registrar horas como para el tiempo transcurrido entre dos eventos. En el art\u00edculo anterior tratamos el tipo de datos DATE para registrar fechas (a\u00f1o, mes y d\u00eda). Aunque, como veremos pronto, existen tambi\u00e9n tipos para indicar fecha y hora en el mismo campo, &hellip; <a href=\"http:\/\/elclubdelautodidacta.es\/wp\/2012\/06\/mysql-ha-llegado-la-hora\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abMySQL &#8211; Ha llegado la hora\u00bb<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[275],"tags":[276,365],"class_list":["post-4705","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-mysql-2","tag-time"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1PGgv-1dT","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/posts\/4705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/comments?post=4705"}],"version-history":[{"count":19,"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/posts\/4705\/revisions"}],"predecessor-version":[{"id":4749,"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/posts\/4705\/revisions\/4749"}],"wp:attachment":[{"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/media?parent=4705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/categories?post=4705"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/elclubdelautodidacta.es\/wp\/wp-json\/wp\/v2\/tags?post=4705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}