¡Descubre el Secreto de la Edad en SQL Server! Calcula Edades en un Parpadeo

¿Te has preguntado alguna vez cómo calcular la edad de forma rápida y eficiente utilizando SQL Server? ¡No busques más! En este breve tutorial, te revelaremos un forma fácil para obtener la edad de tus datos con solo unos pocos pasos en SQL Server.

La clave para calcular la edad radica en la función DATEDIFF y algunos trucos astutos. Para empezar, necesitarás la fecha de nacimiento de tus usuarios o clientes. Luego, con un simple cálculo, podrás mostrar la edad en años de manera precisa.

Sin embargo, solo utilizando la función DateDiff tendríamos inconvenientes, solo resta los años no tiene en cuenta el mes y el día.

¿Cómo lo Solucionamos?

 El siguiente código utiliza la función DateDiff y me ha funcionado mucho

Select DATEDIFF(YEAR,Convert(datetime, '22/01/1980',103),GETDATE())-
			(CASE  WHEN DATEADD(YY,DATEDIFF(YEAR,Convert(datetime,'22/01/1980',103),GETDATE()),
					Convert(datetime,'22/01/1980',103))>GETDATE() THEN 1
				ELSE 0  End) as Edad

Pero existe este otro código, que me gusta y funciona de maravilla:

Select Floor((cast(convert(varchar(8),getdate(),112) as int)-
	Cast(convert(varchar(8),Convert(datetime,'22/01/1980',103),112) as int) ) / 10000) as Edad 

Para este último ejemplo; convertimos la fecha como una cadena pegada (22011980), esto lo restamos, luego dividimos entre 10000 y finalmente redondeamos con la función Sql floor.

Share:

Como Calcular de forma facil, la edad en años meses y dias en Sql

Una manera fácil y sencilla de obtener la edad de una persona en términos de Año, mes o día en Sql Server, se puede realizar a partir del siguiente ejemplo:

Declare @FechaNacimiento datetime
Set @FechaNacimiento = '05/16/2011'
Select Convert(Integer, Datediff(Day, @FechaNacimiento, Getdate())/365.25)EdadAños,
 Convert(Integer, Datediff(Day, @FechaNacimiento, Getdate())/30)EdadMeses,
 Convert(Integer, Datediff(Day, @FechaNacimiento, Getdate()))EdadDias 

El resultado de la ejecución anterior seria lo siguiente:


Analizando un poco el ejemplo anterior, lo que se hace es declarar una variable que almacena la fecha de nacimiento, luego ésta es pasada a cada una de las instrucciones Sql que consulta la edad en años, Meses y días.

Leer Mas:

Los invito ha consultar el código que nos permite obtener el tamaño de las tablas de una Base de datos Sql.
Share:

Conocer el tamaño de las tablas de una Base de Datos Sql

En ocasiones nos vemos en la necesidad de conocer el tamaño de las tablas de una base de datos Sql y saber cuales están ocupando mas espacio en ella, es de vital importancia para una buena administración de los datos y el servidor. Una opción es consultar las propiedades tabla por tabla pero esto puede llegar a hacer ineficiente cuando tenemos muchas tablas. Lo mejor es ejecutar el siguiente script en nuestra base de datos devolviendo ordenadamente que tabla tiene mayor tamaño por el numero de registros e indices que tiene.
Use BaseDatos
Go
SET NOCOUNT ON 

/************OBTENER EL TAMAÑO DE LAS TABLAS DE UNA BASE DE DATOS********/

/**********************************************************
 Corrige las filas, las páginas utilizadas, las páginas 
 reservadas, las páginas hoja y las páginas de datos de 
 cuenta para cada partición en una tabla o índice.
***********************************************************/
DBCC UPDATEUSAGE(0) 


create TABLE #TablesBD 
(
    [name] NVARCHAR(128),
    [rows] CHAR(11),
    reserved VARCHAR(18),
    data VARCHAR(18),
    index_size VARCHAR(18),
    unused VARCHAR(18)
)

INSERT #TablesBD EXEC sp_msForEachTable 'EXEC sp_spaceused ''?''' 

--CONSULTA EL RESULTADO ORDENANDO POR LA TABLA MAS PESADA
SELECT *
FROM   #TablesBD
ORDER BY convert(int, substring(data, 1, len(data)-3)) desc

Los invito a consultar como se calcula la edad en años, meses y días en Sql.

"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""

Share:

Parámetros OUTPUT en procedimientos almacenados

A continuación podemos ver un pequeño ejemplo en Sql Server de como crear un procedimiento almacenado (SP) con la declaración de parámetros entre estos uno de salida (Output), finalmente se muestra la ejecución del SP y retorna el resultado de la variable Output.

--Crear Procedimiento almacenado
create procedure spdeprueba
 @parametro1  int
 ,@parametro2 int
 ,@resultado  int output --variable de salida
As
begin
 set @respuesta = @parametro1 + @parametro2
end
go

--Ejecutar el procedimiento almacenado e imprimir la variable output
Declare @resultado int

Execute spdeprueba 1,2, @resultado output

Select @resultado
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""
Share:

Procedimiento almacenado programado en Job

Buscar en Sql Server un procedimiento almacenado que se encuentre programado en un JOB (dentro de sus pasos de ejecución) muchas veces puede llegar a ser necesario.

En el siguiente código Sql pueden ver como se puede obtener a partir del nombre o las iniciales de procedimiento almacenado el nombre, fecha de creación y modificación, ultima fecha de creación, entre otros.

Select sj.name,sj.description,sj.date_created,sj.date_modified,sjs.command,sjs.last_run_duration,sjs.last_run_date,last_run_time,
  sjsc.next_run_date,next_run_time
From msdb.dbo.sysjobs sj
 Inner join msdb.dbo.sysjobsteps sjs 
On sj.job_id = sjs.job_id
 Inner join msdb.dbo.sysjobschedules sjsc 
On sjs.job_id = sjsc.job_id
where sjs.command Like'%paDCProcesoDiario%'




Share:

Windows 7: Comando para abrir ODBC 64 bits

Abrir un Origen de datos ODBC para Windows 7 en Sistemas Operativos (SO) de 64 bitsregularmente lo buscamos en Inicio > Panel de Control > Herramientas Administrativas > Opciones de Base de Datos (ODBC). Si lo hacemos de esta forma, estamos accediendo al ODBC de 32 bits en SO de 64 bits, la forma correcta de hacerlo es a través del siguiente comando DOS:

* Utilizando la ventana de Comando DOS (cmd.exe) escribimos:

SystemRoot%\SysWow64\odbcad32.exe

ODBC 64 bits Windows 7

ó

ODBC Windows 7 SO 64 bits

Una vez realizado lo anterior, sugiero cambiar el acceso directo del Orígen de datos ODBC, del 
"Panel de control\Herramientas administrativas”, por la nueva ruta así:


Si tienen alguna duda o ampliar la información me cuentan, hasta pronto.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""

Share:

c#: Duplicate items are not supported by the "Resources" parameter

Hoy les presento un error que le sucedió a un amigo (Pedro) a la hora de obtener una copia del diseño y código de un formulario de un proyecto en Visual Studio .Net. Para esto, lo que realizo fue copiar el formulario original y realizarle una copia. Cuando intento abrir la copia del formulario le genero el siguiente error:

"Error 1 The item "obj\Debug\My_Project.NewConsumable.resources" was specified more than once in the "Resources" parameter. Duplicate items are not supported by the "Resources" parameter. My Project"

Solución:

1. Cerrar el Visual Studio.
2. Ir a la carpeta del proyecto de Visual Studio.
3. Localizar el cs. y Designer.cs que acabo de realizarle copia.
4. Abrir ambos archivos.
5. Buscar y reemplazar las instancias del nombre del formulario original con el nombre del nuevo formulario. Tener presente mantener las convenciones de nombres.
6. Guardar ambos archivos, cerrar el editor.
7. Ir a Visual Studio y abrir el proyecto recién corregido y listo.
Cualquier sugerencia o duda nos leemos en los comentarios.

Hasta pronto.
Share:

Visual Studio .Net: resx Invalido

Para restaurar en Visual Studio .Net un archivo resx invalido debemos seguir los siguientes pasos:

1. Eliminar del explorador de proyecto el archivo resx invalido asociado al formulario que presenta problemas.
2. Haga doble clic para abrir el diseñador del formulario.
3. En el formulario, realizar cualquier cambio por ejemplo: mover un botón, caja de texto o control de posición. 
4. Listo!!! Visual Studio generar automáticamente un nuevo archivo resx.

Espero que los pasos anteriores los pueda ayudar. Si tienen dudas o sugerencias del post, los puedes realizar en los comentarios hasta pronto.
Share:

Obtener Día, Mes y Año en SQL Server

A través del siguiente código SQL, podemos obtener de un forma rápida el día, mes y año de una fecha.

Cómo separar una fecha por dia mes y año en sql

Una forma sencilla de separar el día, mes y año de una fecha en sql, es a travez de las funciones DateName y DatePart.

El código esta comentado línea a línea, si tienen algún comentario o sugerencia al mismo me escriben.
Declare @Fecha Datetime,
     @Dia Varchar(2),
     @Mes Varchar(12),
     @Ano Varchar(4)
  
--Guardamos en variable el día de hoy
Set @Fecha = Getdate()

--Establecemos idioma para retornar el formato de la fecha - para este caso español
Set Language spanish

--Retornamos el dia, mes y año de la fecha
Set @Dia = Datepart(dd,convert(datetime,@Fecha,103)) 
Set @Mes = DateName(mm,convert(datetime,@Fecha,103))
Set @Ano = Datepart(yy,convert(datetime,@Fecha,103))

--Establecemos el lenguaje original
Set Language English

--Retornamos variables con los datos
Select @Dia Dia,@Mes Mes,@Ano Año
El resultado seria el siguiente:

Fecha SQL
Leer Mas:

Si queremos consultar el lenguaje configurado en le servidor de base de datos, lo podemos conocer a través de la siguiente instrucción:
select @@LANGUAGE Lenguaje
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""

Share:

▶ Como Validar solo Números en los Textbox C# - Windows Forms

Cuando trabajas en aplicaciones C# y te encuentras con la necesidad de asegurar que un TextBox solo acepte números, la validación adecuada se convierte en un aspecto clave para garantizar la integridad de los datos. En este artículo, exploraremos estrategias efectivas para lograr esta validación específica y proporcionaremos códigos prácticos que puedes implementar en tus proyectos de desarrollo en C#.

TEXTBOX SOLO NÚMEROS

1. Implementación de Validación en Tiempo Real:

La primera estrategia para validar solo números en un TextBox es aprovechar eventos en tiempo real. Puedes suscribirte al evento KeyPress y verificar si la tecla presionada es un número. Aquí tienes un ejemplo de cómo implementarlo:

Como hacer que un Textbox Solo acepte Números en C#

El siguiente código ejemplo valida que se digite solo números en un Textbox en C#, para esto se agrega al evento KeyPress de la caja de texto:
private void txtCaracter_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
{
      MessageBox.Show("Solo se permiten numeros", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
      e.Handled = true;
      return;
}
} 

Este código asegura que solo se ingresen números y controla que las teclas de control (como borrar o retroceso) puedan usarse.

2. Uso de Expresiones Regulares:

Otra técnica poderosa es emplear expresiones regulares para validar el contenido del TextBox. La clase Regex de C# facilita la implementación de esta validación. A continuación, se presenta un ejemplo de cómo hacerlo:

private void TextBox_TextChanged(object sender, EventArgs e)
{
    string input = TextBox.Text;
    if (!Regex.IsMatch(input, "^[0-9]+$"))
    {
        MessageBox.Show("Por favor, ingrese solo números.", "Error de Validación", MessageBoxButtons.OK, MessageBoxIcon.Error);
        TextBox.Text = ""; 
    }
}

Este código verifica si el contenido del TextBox contiene únicamente en números. En caso contrario, muestra un mensaje de error y lo limpia el. 

3. Utilización de Métodos TryParse: 

Una tercera opción es utilizar los métodos int.TryParse o double.TryParse para intentar convertir el texto a un número. Si la conversión tiene éxito, se permite el ingreso; de lo contrario, se rechaza. 

private void TextBox_Leave(object sender, EventArgs e)
{
    if (!int.TryParse(TextBox.Text, out _))
    {
        MessageBox.Show("Por favor, ingrese solo números.", "Error de Validación", MessageBoxButtons.OK, MessageBoxIcon.Error);
        TextBox.Text = ""; // Limpiar el contenido no válido
    }
}

Leer Más:

Valida Solo Números en C#

Al digitar una tecla diferente a un número, se envía un mensaje (se podría comentar la linea del mensaje para que no se muestre) como lo muestra la siguiente imagen:


Digitación correcta:


Garantizar la entrada de datos precisa es esencial en cualquier aplicación, y validar solo números en TextBox en C# es un paso crucial. Al implementar estas estrategias, no solo mejora la integridad de los datos sino que también proporciona a los usuarios una experiencia más intuitiva y libre de errores.

Asegúrate de integrar estas prácticas en tu código para lograr una aplicación robusta y confiable. ¡Explora estas opciones y lleva tu desarrollo en C# al siguiente nivel!

Si quieren conocer esta validación, pero controlando que solo digiten letras, pueden visitar el articulo Solo letras en los Textbox C# - Windows Forms.

Share:

Comparación Detallada entre SCOPE_IDENTITY() y @@IDENTITY para Optimizar tus Consultas

En el mundo de SQL Server, las funciones SCOPE_IDENTITY() y @@IDENTITY desempeñan roles cruciales al recuperar valores de identidad generados durante la inserción de registros en una tabla. Aunque ambas funciones están diseñadas para propósitos similares, existen diferencias clave que es vital comprender.

1. Alcance de la Función:

  • SCOPE_IDENTITY(): Se limita al alcance de la rutina actual, lo que significa que devuelve el último valor de identidad generado dentro del mismo ámbito o bloque de instrucciones T-SQL que realizó la inserción.
  • @@IDENTITY: Es más amplio en alcance y puede devolver el último valor de identidad generado en cualquier ámbito, incluso si es diferente al ámbito actual. Esto lo hace más propenso a errores si se ejecutan múltiples operaciones de inserción simultáneas en diferentes ámbitos.

2. Manejo de Desencadenadores (Triggers):

  • SCOPE_IDENTITY(): Es más seguro en entornos que involucran desencadenadores, ya que solo devuelve el valor de identidad generado en el ámbito actual, evitando conflictos causados por desencadenadores en otros ámbitos.
  • @@IDENTITY: Puede ser afectado por desencadenadores en otros ámbitos, ya que puede devolver el valor de identidad generado más recientemente, incluso si fue causado por una operación en un ámbito diferente.
3. Funciones de Tabla:

  • SCOPE_IDENTITY(): Es preferible cuando se trabaja con funciones de tabla, ya que se comporta de manera más predecible y devuelve el valor de identidad de la tabla específica en la que se realizó la inserción.
  • @@IDENTITY: Puede devolver el valor de identidad de cualquier tabla, lo que puede resultar en comportamientos inesperados en el caso de operaciones simultáneas en múltiples tablas.
Ambas funciones devuelven el id de la última fila insertada en columnas de identidad, a continuación se describen en que consisten:

* @@identity: Devuelve el valor de identidad de una tabla en la sesión actual. Si se inserta una fila en la tabla A, se inserta una fila en la tabla B, y seleccione @@IDENTITY, obtendrá el valor de identidad insertado en la Tabla B.

create table tableA (
                               ID1 int identity(1,1),
                               Detalle varchar(100)
                )
create table tableB (
                               ID1 int identity(20,1),
                               Detalle varchar(100)
                )
Insert Into tableA Values ('Detalle1')
Insert Into tableB Values ('Detalle2')

Select @@IDENTITY       -- resultado 20

Ahora si realizamos la inserción en una tabla pero ésta tiene un trigger que inserta registros en una segunda tabla, la función retornara el Id de la última tabla y no de la que inicialmente estabas insertando.

* SCOPE_IDENTITY():  Retorna el último valor de identidad generado para cualquier tabla, no sólo en la sesión actual sino también en el ámbito actual (es un modulo como procedimiento almacenado, trigger, funciones). Es la mejor opción para solucionar un escenario como lo expuesto anteriormente, ya que devuelve así sea que la tabla donde se inserte tenga trigger, el último Id del último Scope utilizado.


En resumen, SCOPE_IDENTITY() es más preciso y seguro en situaciones donde el alcance debe ser estrictamente controlado, mientras que @@IDENTITY es más versátil pero potencialmente propenso a errores en entornos más complejos. La elección entre ambas dependerá de las necesidades específicas de la aplicación y del control del alcance requerido.
Share:

ToolTip para control DropDownList en ASP.Net

ToolTip DropDownList

Agregar dinamicamente un tooltip a una lista DropDownList es uno de los temas necesarios a la hora que el texto añadido supera considerablemente el ancho del DropDownList, el siguiente ejemplo muestra la información del texto cuando se pasa el mouse por encima del DropDownList.

Colocar el siguiente codigo Javascript en el html de la pagina (entre las etiquetas <Head></Head>)

En en html del DropDownList llamar la anterior función de la siguiente forma:



Si tienen dudas pueden dejar sus comentarios, hasta pronto.
Share:

Habilitar Controles en Toolbox - Visual Studio .Net

En alguna ocasion, por alguna razón el Toolbox de Visual Studio se desabilito como lo muestra la imagen:
Toolbox Visual Studio .Net


Por un momento pense que debia Instalar el Visual Studio, pero lo pude solucionar restaurando la configuracion predeterminada de la siguiente forma:

1. Ir a Inicio -> programas ->Visual Studio 2010->visual studio tools -> Visual Studio 2010 Command Prompt

2. En el prompt ejecutar: devenv /ResetSettings

Luego de ejecutar la anterior linea, se muestra el Toolbox:

ToolBox


Si el problema se mantiene, se puede utilizar el Asistente para la instalación de Visual Studio - a través del Panel de Control para reparar Visual Studio, esto permite restaurar el Visual Studio en su estado original.

"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""
Share: