{"id":2736,"date":"2023-02-26T00:01:17","date_gmt":"2023-02-26T00:01:17","guid":{"rendered":"https:\/\/manualsqlserver.com\/?p=2736"},"modified":"2025-07-24T01:25:05","modified_gmt":"2025-07-24T01:25:05","slug":"fechas-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2736","title":{"rendered":"Fechas en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios__D.png\" alt=\"\" class=\"wp-image-2737\"\/><\/a><\/figure>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Fechas en SQL Server, filtros y campos calculados<\/strong><\/p>\n\n\n\n<p>El manejo correcto de fechas es importante en cualquier programa, en SQL Server existen funciones de fecha nos ayudan a la extracci\u00f3n de datos usando filtros con campos de tipo fecha y tambi\u00e9n construyendo campos calculados con ellos.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Para mas informaci\u00f3n ver:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/manualsqlserver.com\/?p=185\" target=\"_blank\" rel=\"noreferrer noopener\">Funciones de fecha y hora<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=2384\" target=\"_blank\" rel=\"noreferrer noopener\">Trabajando con fechas<\/a><\/p>\n\n\n\n<!--more-->\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p class=\"has-large-font-size\"><strong>Definiendo el formato de fechas<\/strong><\/p>\n\n\n\n<p>El formato de como se escriben las fechas se puede establecer usando la instrucci\u00f3n Set DateFormat, en la siguiente<br>lista se muestran los formatos posibles, donde d es el d\u00eda, m es el mes y y es el a\u00f1o.<\/p>\n\n\n\n<p><strong>mdy Mes\/D\u00eda\/A\u00f1o<br>dmy Dia\/Mes\/A\u00f1o<br>ymd A\u00f1o\/Mes\/D\u00eda<br>ydm A\u00f1o\/D\u00eda\/Mes<br>myd Mes\/A\u00f1o\/D\u00eda<br>dym D\u00eda\/A\u00f1o\/Mes<\/strong><\/p>\n\n\n\n<p><strong>Para formatear la fecha en D\u00eda\/Mes\/A\u00f1o se usa la instrucci\u00f3n siguiente<\/strong><br>set dateformat dmy<br>go<\/p>\n\n\n\n<p>En este art\u00edculo presentamos ejercicios mostrando las fechas en diferentes formatos adem\u00e1s de usar campos<br>calculados con fechas para filtros.<\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<\/strong><br>use Northwind<br>go<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 1<\/strong><\/p>\n\n\n\n<p><strong>Presentar la fecha de nacimiento como Mes Dia, A\u00f1o por ejemplo el 23 de julio de 1966 se muestra Jul 23, 1966<br>select<br>Concat_ws(Space(1),E.TitleOfCourtesy,E.FirstName,E.LastName) As &#8216;Empleado&#8217;,<br>Upper(Substring(FORMAT(E.BirthDate,&#8217;dd\/MMM\/yyyy&#8217;),4,1))+<br>Substring(FORMAT(E.BirthDate,&#8217;dd\/MMM\/yyyy&#8217;),5,2)+ SPACE(1) +<br>Trim(Str(DAY(E.BirthDate))) + &#8216;, &#8216;+trim(Str(YEAR(E.BirthDate)))<br>As &#8216;Fecha de nacimiento&#8217;<br>from dbo.Employees As E<br>go<br><\/strong>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_01.png\" alt=\"\" class=\"wp-image-2738\" width=\"564\" height=\"414\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_01.png 455w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_01-300x220.png 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-larger-font-size\">Ejercicio 2<\/p>\n\n\n\n<p><strong>Presentar la fecha larga como \u00abS\u00e1bado 23 de Julio de 1966\u00bb<\/strong><br><strong>select<br>Concat_ws(Space(1),E.TitleOfCourtesy,E.FirstName,E.LastName) As &#8216;Empleado&#8217;,<br>DATENAME(DW,E.BirthDate) + Space(1) +<br>Trim(Str(DAY(E.BirthDate))) + &#8216; de &#8216;+<br>DATENAME(MONTH,E.BirthDate) + &#8216; de &#8216; +<br>trim(Str(YEAR(E.BirthDate)))<br>As &#8216;Fecha de nacimiento&#8217;<br>from dbo.Employees As E<br>go<\/strong><br>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_02.png\" alt=\"\" class=\"wp-image-2739\" width=\"613\" height=\"389\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_02.png 543w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_02-300x191.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Filtrando por fechas<\/strong><\/p>\n\n\n\n<p>Para filtrar por campos tipo fecha se debe siempre hacer el an\u00e1lisis de la forma mas \u00f3ptima de construir la expresi\u00f3n de filtro, puede usarse funciones de fecha o usando operadores, utilice el Plan de ejecuci\u00f3n estimado para ver la mejor opci\u00f3n.<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 3<\/strong><\/p>\n\n\n\n<p><strong>Listar las \u00f3rdenes entre los meses de Agosto a Noviembre de 1997<\/strong><br><strong>select<br>O.OrderID,<br>O.OrderDate,<br>O.Freight<br>from dbo.Orders As O<br>where year(O.OrderDate) = 1997 and Month(O.OrderDate) in (8,9,10,11)<br>go<br><\/strong>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03.png\" alt=\"\" class=\"wp-image-2740\" width=\"508\" height=\"777\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03.png 437w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03-196x300.png 196w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><\/a><\/figure>\n\n\n\n<p>El plan de ejecuci\u00f3n muestra un costo de 0.0198336<\/p>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A-1024x447.png\" alt=\"\" class=\"wp-image-2742\" width=\"855\" height=\"373\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A-1024x447.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A-300x131.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A-768x335.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A-795x347.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_03A.png 1097w\" sizes=\"auto, (max-width: 855px) 100vw, 855px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Al usar un rango de fechas<\/strong><br>select<br>O.OrderID,<br>O.OrderDate,<br>O.Freight<br>from dbo.Orders As O<br>where O.OrderDate between &#8217;01\/08\/1997&#8242; and &#8217;30\/11\/1997&#8242;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_04.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"510\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_04.png\" alt=\"\" class=\"wp-image-2741\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_04.png 1008w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_04-300x152.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_04-768x389.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_04-795x402.png 795w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><\/a><\/figure>\n\n\n\n<p>El plan de ejecuci\u00f3n muestra un costo de <strong>0.0197506<\/strong>, comparado con el uso de las funciones cuyo valor<br>seg\u00fan el plan de ejecuci\u00f3n estimado es <strong>0.0198336 <\/strong>se puede concluir que es conveniente el uso del operador between.<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Formateando datos tipo fecha<\/strong><\/p>\n\n\n\n<p>Para el formato de fechas usamos la funci\u00f3n format, esta funciona con los caracteres siguientes: \u00abd\u00bb para los d\u00edas,  \u00abM\u00bb (may\u00fascula) para los meses y \u00aby\u00bb para el a\u00f1o.<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 4<\/strong><\/p>\n\n\n\n<p>Mostrar los empleados y su fecha de nacimiento en diferentes formatos, note que al usar tres letras M se muestre el mes en abreviatura, si se usan mas de tres letras M se muestra el nombre del mes completo.<\/p>\n\n\n\n<p><strong>select<br>Concat_ws(Space(1),E.TitleOfCourtesy,E.FirstName,E.LastName) As &#8216;Empleado&#8217;,<br>format(E.BirthDate, &#8216;dd\/MM\/yyyy&#8217;) As &#8216;Fecha de nacimiento&#8217;,<br>format(E.BirthDate, &#8216;dd &#8211; MMM &#8211; yyyy&#8217;) As &#8216;Fecha de nacimiento&#8217;,<br>format(E.BirthDate, &#8216;MMMM, dd &#8211; yyyy&#8217;) As &#8216;Fecha de nacimiento&#8217;<br>from dbo.Employees As E<br>go<br><\/strong>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_05.png\" alt=\"\" class=\"wp-image-2743\" width=\"887\" height=\"356\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_05.png 832w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_05-300x120.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_05-768x308.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_05-795x319.png 795w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 5<\/strong><\/p>\n\n\n\n<p>Listar los empleados, los que tienen menos de 5 a\u00f1os de contratados son Junior, entre 5 y 10 a\u00f1os de contratados son Senior y mas de 10 a\u00f1os, Proffesional.<\/p>\n\n\n\n<p><strong>select<br>Concat_ws(Space(1),E.TitleOfCourtesy, E.FirstName, E.LastName) As &#8216;Empleado&#8217;,<br>Format(E.HireDate, &#8216;dd\/MM\/yyyy&#8217;) As &#8216;Fecha de ingreso&#8217;,<br>iif(Dateadd(YEAR,Datediff(YEAR, E.HireDate,GetDate()),E.HireDate)> GetDate(),<br>Datediff(YEAR, E.HireDate,GetDate())-1,<br>Datediff(YEAR, E.HireDate,GetDate())) As &#8216;A\u00f1os de contratado&#8217;,<br>Case<br>when<br>iif(Dateadd(YEAR,Datediff(YEAR, E.HireDate,GetDate()),E.HireDate)> GetDate(),<br>Datediff(YEAR, E.HireDate,GetDate())-1,<br>Datediff(YEAR, E.HireDate,GetDate())) &lt;5 then &#8216;Junior&#8217; when iif(Dateadd(YEAR,Datediff(YEAR, E.HireDate,GetDate()),E.HireDate)> GetDate(),<br>Datediff(YEAR, E.HireDate,GetDate())-1,<br>Datediff(YEAR, E.HireDate,GetDate())) between 5 and 10<br>then &#8216;Senior&#8217;<br>when<br>iif(Dateadd(YEAR,Datediff(YEAR, E.HireDate,GetDate()),E.HireDate)> GetDate(),<br>Datediff(YEAR, E.HireDate,GetDate())-1,<br>Datediff(YEAR, E.HireDate,GetDate())) >10<br>then &#8216;Proffesional&#8217;<br>End<br>As &#8216;Calificaci\u00f3n&#8217;<br>from dbo.Employees As E<br>go<\/strong><\/p>\n\n\n\n<p>Vamos a cambiar la fecha de ingreso, el campo HireDate para comprobar una calificaci\u00f3n diferente.<br>La fecha de hoy es 24 de febrero de 2023<\/p>\n\n\n\n<p>Empleado con Id = 3 cambiado al 24 de febrero de 2016, para que est\u00e9 dentro de la calificaci\u00f3n Senior.<br>Update dbo.Employees set HireDate = &#8217;24\/02\/2016&#8242;<br>where EmployeeID = 3<br>go<\/p>\n\n\n\n<p>Empleado con Id = 4 cambiado al 24 de febrero de 2020, para que est\u00e9 dentro de la calificaci\u00f3n Junior.<br>Update dbo.Employees set HireDate = &#8217;24\/02\/2020&#8242;<br>where EmployeeID = 4<br>go<\/p>\n\n\n\n<p>Ejecutamos el listado, el resultado se muestra en la siguiente imagen<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_06.png\" alt=\"\" class=\"wp-image-2744\" width=\"781\" height=\"356\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_06.png 720w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/02\/ManualSQL_Fechas_Formato_Filtros_Ejercicios_06-300x137.png 300w\" sizes=\"auto, (max-width: 781px) 100vw, 781px\" \/><\/a><\/figure>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Fechas en SQL Server, filtros y campos calculados El manejo correcto de fechas es importante en cualquier programa, en SQL Server existen funciones de fecha nos ayudan a la extracci\u00f3n de datos usando filtros con campos de tipo fecha y tambi\u00e9n construyendo campos calculados con ellos. Para mas informaci\u00f3n ver: Funciones de fecha y horaTrabajando &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2736\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2737,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6],"tags":[128,273,291],"class_list":["post-2736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","category-funcionessql","tag-campos-calculados","tag-datediff","tag-dateformat","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2736"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2736\/revisions"}],"predecessor-version":[{"id":2745,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2736\/revisions\/2745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2737"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}