jueves, 18 de diciembre de 2014

Función Split en SQL Server - Function Split in SQL Server

T-SQL no cuenta con una función split, como si la encontramos en .NET, javascript u otros lenguajes. La solución no es nueva, hay algunos sitios donde podemos encontrar diferentes maneras de obtener la acción deseada, a continuación les comparto el modo como los trabajamos en InfoTácticas Soluciones.
--
--
create function  [dbo].[fni_Split]
(
 @Cadena nvarchar(max),
 @Delimitador nvarchar(5)
)  
RETURNS @TblRetorno table 
(
 Id int identity(1,1),
 Dato nvarchar(max)
) 
AS  
BEGIN 
 
 While (Charindex(@Delimitador,@Cadena)>0)
 Begin
  Insert Into @TblRetorno (Dato)
  Select 
   Dato = ltrim(rtrim(Substring(@Cadena,1,Charindex(@Delimitador,@Cadena)-1)))

  Set @Cadena = Substring(@Cadena,Charindex(@Delimitador,@Cadena)+1,len(@Cadena))
  
 End
 
 Insert Into @TblRetorno (Dato)
 Select Dato = ltrim(rtrim(@Cadena))

 Return
END

split sql server
Posted by InfoTacticas Soluciones  |  No comments

12/18/2014 09:42:00 a. m. Share:

0 comentarios:

miércoles, 17 de diciembre de 2014

Diferencia de años entre fechas SQL Server - Difference in years between dates in SQL Server

La siguiente función mostrada en SQL Server es una opción para calcular el intervalo de años entre dos fechas, la primera fecha es la fecha de inicio(menor) y la segunda fecha es la fecha final(mayor). En caso que se quiera sacar la diferencia de años de una fecha cualquier con la fecha actual, usar como segundo parámetro getdate() o simplemente null. Dentro de la funcion se valida que si la segunda fecha es nula, se asigna al parámetro la fecha actual.
--
--
Create FUNCTION [dbo].[fnr_ireCalcularIntervaloAnios](@FechaInicio datetime, @FechaFin datetime)
returns int

as
begin
 declare @anios int
 
 if @FechaFin is null
  set @FechaFin = getdate()
 
 set @anios = (((365* year(@FechaFin))-(365*(year(@FechaInicio))))+ (month(@FechaFin)-month(@FechaInicio))*30 
  +(day(@FechaFin) - day(@FechaInicio)))/365
 return @anios
end
GO
Para ejecutar la función podemos usar:
 --   
 --
 set dateformat dmy -- para poder trabajar con fechas en formato dia/mes/año
                      -- es valido solo para la ventana de consultas
 select dbo.[fnr_ireCalcularIntervaloAnios] ('10/12/2004', '17/12/2010')
 select dbo.[fnr_ireCalcularIntervaloAnios] ('24/04/2004', null)
sql server
Posted by InfoTacticas Soluciones  |  No comments

12/17/2014 03:54:00 p. m. Share:

0 comentarios:

jueves, 4 de diciembre de 2014

Formato de Fechas en SQL SERVER

Si su servidor SQL Server está en lenguaje inglés, el formato en que se guardan las fechas es MM/DD/YY.
Si los desarrolladores no tenemos en cuenta estos formatos de fecha, podemos ocasionar que se inserten fechas érroneas, por ejemplo si quiero consultar una fecha 05 de febrero del 2015, en formato español seria '05/02/2015', pero si nuestro servidor está en idioma inglés. a la hora de devolver los resultados, la fecha considerada sería 02 de Mayo del 2015.

Entonces, algunas de las opciones para evitar estos inconvenientes a la hora de trabajar con fechas en SQL Server es:

  • Utilizar el formato estándar de ISO para enviar los datos de fecha y hora a SQL Server, que es "YYYYMMDD HH:mm:ss" (sin separadores). Con el formato ISO es más "internacional" y es independiente del idioma predeterminado. Si yo empiezo a utilizar este formato para mis consultas no tendré problemas en ninguna de mis aplicaciones por mas que nuestro usuario este configurado en Ingles, Español o lo que fuere, ni tampoco si en un Windows tengo definido en su configuración regional cualquier cosa.

  • Por ejemplo:
    --
    --
    SELECT * FROM Paciente WHERE FechaNacimiento = '19820827'
    
  • Yo lo suelo hacer, si es que estoy consultando en la misma ventana para Queries del SQL Server, primero ejecuto: set dateformat dmy que me permite trabajar, en esa ventana de consultas, las fechas en formato dmy y también tendría que usar la función CONVERT para convertir el tipo de dato DATETIME a VARCHAR, pero antes es necesario decirle que lo convierta en un formato de DD/MM/YYYY, para eso se usa como tercer parametro de la funcion convert el valor: 103.
    Por ejemplo:
    --
    --
    SELECT * FROM Paciente WHERE convert(varchar(10), FechaNacimiento, 103) = '27/08/1982'
    
    Así, la fecha consultada sería reconocida como el 27 de agosto de 1982. En el caso que quiera consultar dentro de un procedimiento almacenado, lo realizaría utilizando, sería de la siguiente manera:
    create procedure sp_ObtenerPacientesSegunFechaNacimiento
    @FechaNacimientoConsulta datetime
    as
       SELECT IdPaciente, Nombres, Apellidos FROM Paciente 
       WHERE convert(varchar(10), FechaNacimiento, 103) = convert(varchar(10), @FechaNacimientoConsulta, 103)
    
sql server
Posted by InfoTacticas Soluciones  |  No comments

12/04/2014 01:22:00 p. m. Share:

0 comentarios:

viernes, 28 de noviembre de 2014

Usar HttpContext desde Librería de Clases - Using HttpContext from class library

Para usar HttpContext en una librería de clases primero debemos añadir la referencia System.Web en el proyecto. Luego importar el ensamblado System.Web en la clase donde lo vamos a usar.
using System.Web;
En este caso estoy creando un método estático que me obtenga la dirección IP de un equipo.
    public static string GetIpCliente(System.Web.HttpContext contexto)
    {           
        string IP4Address = String.Empty;

        foreach (IPAddress IPA in Dns.GetHostAddresses(contexto.Request.UserHostAddress))
        {
          // CODIGO
        }
   }
El propósito del procedimiento lo explique en una entrada anterior, por si les interesa verlo es la siguiente: obtener el nombre del equipo y la dirección IP
Volviendo al tema, para usar el método desde un proyecto ASP (MVC o WebForms) sería de la siguiente manera:
    String ip = Utilitarios.GetIpCliente(System.Web.HttpContext.Current);
Aquí Utilitarios es una clase estática (no es necesario instanciarla para poder acceder a sus métodos estáticos públicos) y lo que se le pasaría al método GetIpCliente es el HttpContext de la actual solicitud HTTP a la aplicación web.
C#
Posted by InfoTacticas Soluciones  |  No comments

11/28/2014 07:55:00 a. m. Share:

0 comentarios:

jueves, 20 de noviembre de 2014

Obtener el Nombre del equipo y la Direccion IP en C# - How to Get User IP address using C#

Para obtener el nombre de una computadora y su IP en C# utilizaremos el namespace System.net el cual provee una interface de programación simple para muchos de los protocolos de redes usados actualmente y los metodos GetHostNameGetHostAddresses. El primer metodo obtiene el nombre de la computadora local y retorna un valor de tipo string. Mientras que el segundo método obtiene la IP de una computadora a partir del nombre de la computadora y devuelve un valor por medio de un arreglo de tipo IPAddress (un arreglo de bytes).

Un inconveniente en la captura de la dirección IP es que hay diferencias en el formato de dirección IP entre la IP versión 4 y la IP versión 6. Cuando el protocolo IPv4 es el único protocolo habilitado en el servidor web, el acceso a la dirección IP en las Cabeceras de la Solicitud retornarán la dirección IPv4 habitual. Sin embargo, si IPv6 está también habilitada, se impondrá sobre IPv4. Los Sistemas Operativos Windows a partir de Windows Vista traen habilitado por defecto IPv6.

En el código presentado a continuación se verifica si la dirección devuelta es del formato IPv6, también se verifica si se está ejecutando en un equipo local, en cuyo caso devolverá "127.0.0.1" (IPv4) o ::1 (IPV6), en esos casos se procede a obtener la dirección IP a partir del nombre de la computadora y en un formato IPv4.

Espero les sea de utilidad el código.
     public static string GetIpCliente(System.Web.HttpContext contexto)
     {            
         string IP4Address = String.Empty;

         foreach (IPAddress IPA in Dns.GetHostAddresses(contexto.Request.UserHostAddress))
         {
            if (IPA.AddressFamily.ToString() == "InterNetwork" || IPA.AddressFamily.ToString() == "InterNetworkV6")
            {
                IP4Address = IPA.ToString();
                break;
            }
         }

         if (IP4Address != "127.0.0.1" && IP4Address != "::1" ) //String.Empty
         {
            return IP4Address;
         }

         foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
         {
            if (IPA.AddressFamily.ToString() == "InterNetwork")
            {
                IP4Address = IPA.ToString();
                break;
            }
         }
         return IP4Address;
            
    }  
Más información: http://www.4guysfromrolla.com/articles/071807-1.aspx
C# IP
Posted by InfoTacticas Soluciones  |  No comments

11/20/2014 02:18:00 a. m. Share:

0 comentarios:

miércoles, 8 de octubre de 2014

Concatenar varias filas en una sola cadena usando For XML PATH

Para concatenar varias filas en una sola, se puede usar cursores, sin embargo una solución mucho más rápida es usar la clausula FOR XML utilizando el modo PATH. Adicionalmente será necesario eliminar una coma que se coloca al inicio de la cadena y para ello se puede usar la función STUFF que sirve para ingresar una cadena en otra a partir de los parámetros de posición y longitud, o también se puede usar la función substring tal como veremos más adelante en este post.


Voy a hacer uso de una tabla Proveedor y otra tabla ProveedorContacto, tal como se ve en la imagen. La Tabla ProveedorContacto almacena nombres, apellidos, cargo de contactos asociados a algún proveedor a través del campo IdProveedor.


Al final lo que buscamos es por cada proveedor, listar en una cadena el nombre y los apellidos de sus contactos.


FOR XML PATH, sirve para devolver una consulta en formato XML.

select t1.IdProveedor, p.RazonSocial,
stuff((select ', ' + t2.Nombres + ' ' + t2.ApellidoPaterno 
from ProveedorContacto  t2 
where t1.IdProveedor = t2.IdProveedor 
for xml path('')),1,2,'') 'Contactos '
from ProveedorContacto  t1
inner join Proveedor p on  t1.IdProveedor = p.IdProveedor
group by t1.IdProveedor, p.RazonSocial
El resultado se muestra a continuación:
concatenar sql server
Posted by InfoTacticas Soluciones  |  No comments

10/08/2014 03:21:00 p. m. Share:

0 comentarios:

Concatenar varias filas en una sola cadena de texto T-SQL usando COALESCE

Hola, si necesitan concatenar varias filas de una tabla en una sola cadena de texto, entonces pueden usar la función coalesce en T-SQL.

Voy a mostrar un ejemplo haciendo uso de una tabla Proveedor y otra tabla ProveedorContacto, tal como se ve en la imagen. La Tabla ProveedorContacto almacena nombres, apellidos, cargo de contactos asociados a algún proveedor a través del campo IdProveedor.
Si lo que necesitamos es mostrar en una cadena el nombre y los apellidos de los contactos del proveedor: Quimica Suiza (IdProveedor = 2) separados por comas. Entonces, el código T-SQL empleado sería como sigue:

coalesce concatenar sql server
Posted by InfoTacticas Soluciones  |  No comments

10/08/2014 10:50:00 a. m. Share:

0 comentarios:

Get updates in your email box
Complete the form below, and we'll send you the best coupons.

Deliver via FeedBurner
back to top