Wednesday, December 11, 2013

Cuántos domingos hay en un rango de fecha - Query

La pregunta es cómo determinar, dado un rango de fechas, cuántos días domingos hay.
SQL Server no tiene una función propia como tal, así que podemos utilizar la siguiente
función la cual le enviamos el rango de fechas. 
 
 
 CREATE FUNCTION fncCuantosDomingosHay (@inicio DATETIME, @fin DATETIME)
  RETURNS integer
  AS
  BEGIN
  DECLARE @dia_sem INT
  DECLARE @domingos INT
  DECLARE @fecha datetime
   
  SET @fecha=@inicio
  SET @domingos=0
  while @fecha <= @fin
  BEGIN    
   SELECT @dia_sem=datepart(weekday,@fecha) 
   IF @dia_sem=1
     SET @domingos=@domingos+1    
   SELECT @fecha=dateadd(dd,1,@fecha)     
  END
  return @domingos
    END


--EJECUTAMOS LA FUNCIÓN

declare @total integer

exec @total= fncCuantosDomingosHay '2013/10/16','2013/11/15'

print @total

--Resultado: 4

Thursday, December 5, 2013

Primer y último día de la fecha actual / vb.net

Se busca colocar por defecto la fecha con el primer día del mes actual y el último día propiamente al control DateTimePicker.

Me.dtpCierreExitosoDE.Value = Date.Now.AddDays(-Now.Day + 1)
Me.dtpCierreExitosoAL.Value = Date.Now.AddDays(-Now.Day + 1).AddMonths(1).AddDays(-1)
 
Sencillo, no?
 
HaPPy Coding =) 

Monday, October 14, 2013

Webp vs. JPG/PNG

WebP es un formato de imagen (relativamente nuevo) cuya característica principal es ofrecer una mejor claridad de imagen con un tamaño menor a diferencia del JPG/PNG

Las imágenes en WebP lucen igual que las de JPG/PNG
Las imágenes en WebP tienen un peso mucho menor
Las imágenes en WebP tienen un soporte para el canal alfa, los usuarios podrán crear transparencias en la imagen.

A continuación, algunas herramientas que permiten convertir imágenes JPG/PNG en formato WebP:

WebP for Photoshop. Un plugin para Ps que le permite al usuario cargar y guardar sus imágenes en formato WebP.

Convert to WebP. Te permite cambiar el formato de imagen jpg y png, a distintos formatos incluido WebP.

WebP to Other Format. Cambia diversos formatos de imagen a WebP.

Gimp For WebP. Es un plugin que se puede utilizar en el software de edición de imágenes de Linux, Gimp.

WebP Codec for Windows.
Hace que el formato de imagen WebP se pueda visualizar de forma nativa en Windows.

Fuente: isopixel.ne

Si los navegadores fueran celebridades

Les comparto una interesante y graciosa infografía en el que muestra qué celebridad sería cada navegador por sus características.


Thursday, October 3, 2013

Infografia - Responsive Web Design

Les comparto una excelente infografía sobre el Responsive Web Design.



Fuente: webbizarro.com

Thursday, September 12, 2013

Cuántos Sábados y Domingos hay en un rango de fechas

Cuántos Sábados y Domingos hay en un rango de fechas (en vb.net)

La solución... seguramente muchas pero la mía ha sido Una función que recibe el rango de fechas (en mi caso solo una porque la trabajo con la fecha actual) que va preguntando si las fechas intermedias son o no sábado o domingo. Simple. 

    Public Function NotWorkingDays(ByVal dtFechaRegistro As Date)

        Dim dtFechaActual As Date = Now.Date 
        dtFechaRegistro = dtFechaRegistro.Date

        Dim dias_no_laborales As Integer = 0
        While dtFechaRegistro <= dtFechaActual

            If dtFechaRegistro.DayOfWeek = DayOfWeek.Saturday Or dtFechaRegistro.DayOfWeek = DayOfWeek.Sunday Then
                dias_no_laborales = dias_no_laborales + 1
            End If

            dtFechaRegistro = dtFechaRegistro.AddDays(1)
        End While

        Return dias_no_laborales
    End Function

Friday, August 30, 2013

Datediff - convertir horas A decimal

Me pidieron saber el tiempo transcurrido en horas dada dos fechas. Fecha hora inicial en la que el Call Center recibió una llamada hasta la hora fecha en la que se dio respuesta a esa llamada.

Fecha Hora inicial: 30/08/2013 07:30:30
Fecha Hora final: 30/08/2013 08:00:00

Dado ese ejemplo, tenemos que transcurrieron 1.51 horas de tiempo. Pero resulta que cuando realizamos alguna división, la función Datediff omite la parte decimal y por tanto el cálculo ya no es exacto.

La siguiente línea de código muestra cómo hacerlo. Cómo convertir horas a decimal utilizando DATEDIFF

declare @start datetime
set @start = '2013-08-29 07:00:00'

declare @end datetime
set @end = '2013-08-29 08:30:30' --getdate() 1,51
select cast(datediff(second, @start, @end) / 3600.0 as decimal (10, 2))


Fácil, ¿no?

Friday, June 28, 2013

Formato fecha "dia de mes del Año"

En Visual Basic .NET tenemos la función ToString() para dar formato a la fecha. Y el formato más común es "dd/MM/yyyy" pero y si quiero algo así como "28 de junio del 2013"? 

Como sigue:

Now.Date.ToString("dd \de MMMM \del yyyy", CultureInfo.CreateSpecificCulture("es-ES"))

HaPPy CoDiNg =)

Consulta SQL entre 2 servidores distintos

Vaya, qué tragedia que me pasó hoy. Mas bien que no lo hice en el servidor de producción sino en el de test. 

Hice un update sin where y afectó alrededor de 1500 registros jajaj. Haber grabado mi reacción de ese momento. Lo único que me consolaba era que se trataba de una copia de base de datos. Pero de todas maneras esa copia la estamos utilizando más de uno, no solo yo. Y pedir una nueva copia es re-dificil. Mucho trámite. 

Lo que hice fue hacer un insert de los registros de la base de datos del servidor de producción. Le hice un truncate a la tabla y luego el insert. En realidad, hice el truncate a dos tablas y el insert a estas mismas dos ya que es un maestro-detalle. 

Sin embargo, primero hay que agregar el servidor al que queremos acceder desde nuestro servidor. En este caso, yo desde el servidor de test al servidor de producción. Cómo lo hacemos? 

EXEC sp_addlinkedsrvlogin 'NombreDeTuServidor', 'false', NULL, 'UsuarioConElQueTeConectas', 'ContrseniaDeEseUsuario'

Lo ejecutas y ahora estás apto para realizar tu consulta de esta manera:

insert into parametro (spar_id, spar_dom_id, spar_descripcion, iCreateBy, dtCreatedt, iUpdateBy, dtUpdatedt, iEstadoReg, iConcurrency_id, bActivo, bActivoMovil) 
(select * from BOSCZDB00.Boveda.dbo.parametro)

Nota para que puedas acceder a la tabla de otro servidor va de la siguiente manera:

SERVIDOR.BASE_DE_DATOS.ESQUEMA.TABLA

HaPPy CoDiNg!

Monday, March 4, 2013

Rotar como La interfaz metro de windows8 con CSS3

La interfaz que utiliza Windows 8 es la Modern UI (Metro) que hace uso de efectos 3D. Podemos copiar esos efectos para agregarlos a nuestros diseños web y que se vean chulos utilizando CSS3.

Vamos a rotar 3 cajas. Una rotará desde el centro, la segunda rotará desde el lateral y se desplazará y la tercera rotará desde el lateral.



Código HTML

    
  
        
Rota desde el centro  
Rota desde el lateral y se desplaza  
Rota desde el lateral  
Código CSS
.cobertor {
        display: table;
        background: #112E86;
        text-align: center;
        padding: 15px;
        margin: 20px auto;
        box-shadow: inset 0px 0px 20px black;
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
        border-radius: 3px;
      }
      .cobertor div {
        display: inline-block;
        background: #cccccc;
        padding: 15px;
        margin: 15px;
        /*color: #111111;*/
        text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.6);
        box-shadow: 0px 0px 20px black, inset 0px 1px 0px rgba(255, 255, 255, 0.6), inset 0px 2px 0px rgba(255, 255, 255, 0.1);
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
        border-radius: 3px;
      }
      .cobertor div,
      .cobertor div > div {
        -webkit-transition: all 0.5s ease;
        -moz-transition: all 0.5s ease;
        transition: all 0.5s ease;
        -webkit-transform-style: preserve- 3 d;
        -moz-transform-style: preserve- 3 d;
        transform-style: preserve- 3 d;
        -webkit-transform: perspective(600px);
        -moz-transform: perspective(600px);
        transform: perspective(600px);
      }
      
      .cobertor .rotar span {
        display: inline-block;
      }
      
      .cobertor .rotar div {
        -webkit-transition: all 1s ease;
        -moz-transition: all 1s ease;
        transition: all 1s ease;
        margin: 10px;
        padding-top: 40px;
        height: 80px;
        width: 120px;
                          background: #2E9AFE;
        -webkit-transform: perspective(300px);
        -moz-transform: perspective(300px);
        transform: perspective(300px);
        -webkit-transform-origin: 100% 50%;
        -moz-transform-origin: 100% 50%;
        transform-origin: 100% 50%;
      }
      .cobertor .rotar span:hover .rotar-1 {
        -webkit-transform: perspective(300px) rotateY(-180deg);
        -moz-transform: perspective(300px) rotateY(-180deg);
        transform: perspective(300px) rotateY(-180deg);
      }
      .cobertor .rotar span .rotar-2 {
        -webkit-transform-origin: 50% 50%;
        -moz-transform-origin: 50% 50%;
        transform-origin: 50% 50%;
      }
      .cobertor .rotar span:hover .rotar-2 {
        -webkit-transform: perspective(300px) rotateY(-180deg);
        -moz-transform: perspective(300px) rotateY(-180deg);
        transform: perspective(300px) rotateY(-180deg);
      }
      .cobertor .rotar span:hover .rotar-3 {
        -webkit-transform: perspective(300px) rotateY(-180deg) translateX(100%);
        -moz-transform: perspective(300px) rotateY(-180deg) translateX(100%);
        transform: perspective(300px) rotateY(-180deg) translateX(100%);
      }

Este artículo fue basado en el post de mi querido amigo Pedro Gutierrez. Gracias!

Wednesday, February 20, 2013

Numerar registros De una consulta con particion

Hay una función SQL que se llama ROW_NUMBER(). Nos permite numerar en orden (ascedente o descendente) las filas o registros de un query sql ejecutado.

Por ejemplo, en un mes mis empleados hicieron sus visitas de mantención a nuestros clientes. Quiero numerar sus visitas.

Visita Empleado Cliente
1 Juan Perez  Empresa001
2 Juan Perez Empresa002
3 Juan Perez EmpresaAAA
4 Juan Perez Empresa951
5 Pedro Palotes Empresa357
6 Pedro Palotes Empresa555
7 Tobias Sanchez EmpresaXYZ
8 Julio Cortez EmpresaQWE

Pero resulta que el ROW_NUMBER está numerando las filas sin hacer alguna distinción. Yo quisiera que se numeren de acuerdo a cierto campo en este caso el empleado. Quedería así...

Visita Empleado Cliente
1 Juan Perez Empresa001
2 Juan Perez Empresa002
3 Juan Perez EmpresaAAA
4 Juan Perez Empresa951
1 Pedro Palotes Empresa357
2 Pedro Palotes Empresa555
1 Tobias Sanchez EmpresaXYZ
1 Julio Cortez EmpresaQWE

Muy bien, para ello utilizamos el "partition by" del ROW_NUMBER... así (parte del SELECT):

  row_number() over (partition by v.id_responsable order by v.fecha asc) as Visita




Había sido sencillo, no?
HaPPy CoDiNg

Wednesday, February 6, 2013

Insertar número De página desde La segunda hoja en word

La primer página es nuestra página de presentación o carátula por tanto no queremos que tenga un número de página. Queremos que se inicie a contar las páginas desde la segunda hoja. 

 Dentro de nuestro documento en Microsoft Word nos vamos a la pestaña "INSERTAR", a continuación hacemos clic sobre la opción "Número de página" y elegimos nuestro formato favorito, ya sea si queremos que el número de página se visualice arriba, abajo, izquierda, etc.



Ahora hacemos clic sobre la opción "Número de página" que es la tercer opción de izquierda a derecha.



Luego clic en Formato del número de página y Activamos la opción Iniciar en: y allí colocamos el 0 para que luego empiece a contar desde 1. 


Aceptamos y activamos la casilla "Primera página diferente" que se encuentra ubicada ahí mismo en el submenú "Opciones" del menú principal "Diseño".




Fácil, cierto?

Friday, January 18, 2013

Registros que se repiten query SQL

Caso: cómo obtener las filas o registros de una tabla cuyos valores (valor de una columna) se repiten.

Me topé con el caso de que en mi tabla de contratos, tenía contratos con el mismo número de contrato el cual sólo debería pertenecerle a un registro (no tenía el constraint de que sea único ya que también se guardan las adendas). Necesitaba saber qué contratos se estaban repitiendo más de una vez para hacerle un seguimiento y saber cómo surgió tal caso.

A través del siguiente query sql resultó bastante útil...

SELECT id_contrato FROM boveda.dbo.Cliente_Contrato  
WHERE fecha_adenda is null and habilitado=1 and nro_contrato in
(
SELECT  nro_contrato FROM boveda.dbo.Cliente_Contrato 
WHERE habilitado=1 and fecha_Adenda is null 
GROUP BY nro_contrato
HAVING COUNT(*) > 1
)


En general, será una consulta anidada con un HAVING el cual podés personalizarlo si querés saber de los registros que se repiten más de 1 vez, más de 2, etc. Para un caso singular, debes cambiar el filtro en el WHERE (desde luego que sí)

Fácil, verdad?

HaPPy CoDiNg =)

Thursday, January 10, 2013

SQL: update con alias

La forma correcta de escribir una sentencia UPDATE utilizando un alias es como sigue:

UPDATE c set c.contrato_id=
w.nro_contrato=c.nro_contrato)
(SELECT DISTINC w.id FROM boveda.com.contrato w WHERE w.tipo_registro=1 and w.nro_contrato='2402/04')
FROM boveda.com.contrato c
WHERE c.tipo_registro=3 and c.nro_contrato='2402/04'

Sencillo después de saber el cómo, no? Yo no lo sabía e insistía que era algo como...

UPDATE    nombre_de_la_tabla    y_aqui_el_alias    SET    y_aqui_el_resto