Obtener zona horaria actual + Funciones de Fecha – SQL Server

Por 0 No tags Permalink

A partir de la versión 2016. Podemos utilizar sys.time_zone_info para ver todas las zonas horarias. Esta funcion nos devuelve información sobre las  zonas horarias  instaladas en la computadora.

SELECT * FROM sys.time_zone_info
SELECT GETDATE() AT TIME ZONE 'W. Europe Standard Time' [Hora España], 
		GETDATE() AT TIME ZONE 'Singapore Standard Time' [Hora Singapore]

Un ejemplo de como obtener las hora en el PERU

Básicamente se obtiene por DATEPART(TZ,SYSDATETIMEOFFSET()) la zona horaria del servidor en minutos, y en @DstOffset configuramos la que le correspondería a Perú, la diferencia se la suma en minutos al GETDATE() (hora server), y con esto obtendríamos la hora deseada. Lo que es importante notar, que los horarios de verano locales en Chile, me imagino que son actualizados a nivel servidor, de forma tal que @SrcOffset debiera ser el correcto, pero el de Perú, eventualmente debiera ser ajustado, -300 (5 horas) es el actual, -360 para (-6 horas utc) o -240 (-4 horas utc). Las funciones DATEPART Y SYSDATETIMEOFFSET son compatibles con SQL SERVER 2008.

DECLARE @SrcOffset INT
DECLARE @DstOffset INT
DECLARE @Now       DATETIME

SELECT  @SrcOffset = DATEPART(TZ,SYSDATETIMEOFFSET()),
        @DstOffset = -300,
        @Now       = GETDATE()  

SELECT  @Now                                            AS 'LocalDate',
        DATEADD(MINUTE, @DstOffset - @SrcOffset, @Now)  AS 'PeruDate'

Funciones SYSDATETIME, SYSDATETIMEOFFSET y SYSUTCDATETIME

Las funciones de fecha y hora de alta precisión de SQL Server tienen una escala de 7 y son:

SYSDATETIME: retorna la fecha/hora ordenador en la que se ejecuta SQL Server
SYSDATETIMEOFFSET: retorna la fecha/hora ordenador en la que se ejecuta SQL Server más el desplazamiento de UTC
SYSUTCDATETIME: retorna la fecha/hora ordenador en la que se ejecuta SQL Server como UTC

SELECT SYSDATETIME()		AS 'DateAndTime';		-- return datetime2(7)
SELECT SYSDATETIMEOFFSET()	AS 'DateAndTime+Offset';	-- datetimeoffset(7)
SELECT SYSUTCDATETIME()		AS 'DateAndTimeInUtc';		-- returns datetime2(7)

Función DATENAME

DATENAME(): devuelve una cadena correspondiente a la parte de fecha especificada

SELECT DATENAME(YEAR, GETDATE())     AS 'Year',        
	DATENAME(QUARTER, GETDATE())     AS 'Quarter',     
	DATENAME(MONTH, GETDATE())       AS 'Month',       
	DATENAME(DAYOFYEAR, GETDATE())   AS 'DayOfYear',   
	DATENAME(DAY, GETDATE())         AS 'Day',         
	DATENAME(WEEK, GETDATE())        AS 'Week',        
	DATENAME(WEEKDAY, GETDATE())     AS 'WeekDay',     
	DATENAME(HOUR, GETDATE())        AS 'Hour',        
	DATENAME(MINUTE, GETDATE())      AS 'Minute',      
	DATENAME(SECOND, GETDATE())      AS 'Second',      
	DATENAME(MILLISECOND, GETDATE()) AS 'MilliSecond', 
	DATENAME(MICROSECOND, GETDATE()) AS 'MicroSecond', 
	DATENAME(NANOSECOND, GETDATE())  AS 'NanoSecond',  
	DATENAME(ISO_WEEK, GETDATE())    AS 'Week'

Función DATEPART
DATEPART(): devuelve un número entero correspondiente a la parte de fecha especificada

SELECT DATEPART(YEAR, GETDATE()) AS 'Year',
		DATEPART(QUARTER, GETDATE())     AS 'Quarter',
		DATEPART(MONTH, GETDATE())       AS 'Month', 
		DATEPART(DAYOFYEAR, GETDATE())   AS 'DayOfYear',  
		DATEPART(DAY, GETDATE())         AS 'Day',    
		DATEPART(WEEK, GETDATE())        AS 'Week',   
		DATEPART(WEEKDAY, GETDATE())     AS 'WeekDay',
		DATEPART(HOUR, GETDATE())        AS 'Hour',   
		DATEPART(MINUTE, GETDATE())      AS 'Minute', 
		DATEPART(SECOND, GETDATE())      AS 'Second', 
		DATEPART(MILLISECOND, GETDATE()) AS 'MilliSecond',
		DATEPART(MICROSECOND, GETDATE()) AS 'MicroSecond',
		DATEPART(NANOSECOND, GETDATE())  AS 'NanoSecond',
		DATEPART(ISO_WEEK, GETDATE())    AS 'Week'

Funciones DATEFROMPARTS, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS, SMALLDATETIMEFROMPARTS y TIMEFROMPARTS

DATEFROMPARTS(): retorna una fecha a partir de la fecha especificada
DATETIME2FROMPARTS(): retorna una fecha y hora2 de la parte especificada
DATETIMEFROMPARTS(): retorna una fecha y hora de la parte especificada
DATETIMEOFFSETFROMPARTS(): retorna un datetimeoffset de la parte especificada
SMALLDATETIMEFROMPARTS(): retorna una pequeña fecha y hora de la parte especificada
TIMEFROMPARTS(): retorna un tiempo de la parte especificada

SELECT DATEFROMPARTS(2019,1,1)                          AS 'Date',          -- retorna date
	DATETIME2FROMPARTS(2019,1,1,6,0,0,0,1)          AS 'DateTime2',     -- retorna datetime2
	DATETIMEFROMPARTS(2019,1,1,6,0,0,0)             AS 'DateTime',      -- retorna datetime
	DATETIMEOFFSETFROMPARTS(2019,1,1,6,0,0,0,0,0,0) AS 'Offset',        -- retorna datetimeoffset
	SMALLDATETIMEFROMPARTS(2019,1,1,6,0)            AS 'SmallDateTime', -- retorna smalldatetime
	TIMEFROMPARTS(6,0,0,0,0)                        AS 'Time'           -- retorna time
Funciones DATEADD, EOMONTH, SWITCHOFFSET y TODATETIMEOFFSET

DATEADD(): devuelve datepart con intervalo agregado como fecha y hora
EOMONTH(): devuelve el último día del mes de compensación como tipo de fecha_inicio
SWITCHOFFSET(): devuelve el desplazamiento de fecha y hora y el desplazamiento de zona horaria
TODATETIMEOFFSET(): devuelve la fecha y la hora con el desplazamiento de la zona horaria
SELECT DATEADD(DAY,1,GETDATE())         AS 'DatePlus1',          
	EOMONTH(GETDATE(),1)            AS 'LastDayOfNextMonth', 
	SWITCHOFFSET(GETDATE(), -6)     AS 'NowMinus6',          
	TODATETIMEOFFSET(GETDATE(), -2) AS 'Offset'              
Compara el precio para envíos nacionales e internacionales con hasta un 70% de ahorro.

No Comments Yet.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *