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:

back to top