saber que poner name cual como change cambiar sql-server tsql

sql server - que - Poner una fecha en el servidor SQL



que poner en server name sql (9)

Ampliando la solución Convert / Cast, en Microsoft SQL Server 2008 puede hacer lo siguiente:

cast(cast(getdate() as date) as datetime)

Simplemente reemplace getdate() con cualquier columna que sea una fecha y hora.

No hay cadenas involucradas en esta conversión.

Esto está bien para consultas o actualizaciones ad-hoc, pero para combinaciones de clave o procesamiento muy utilizado, puede ser mejor manejar la conversión dentro del procesamiento o redefinir las tablas para tener claves y datos apropiados.

En 2005, puede usar el piso desordenado: cast(floor(cast(getdate() as float)) as datetime)

No creo que eso también use conversión de cadenas, pero no puedo hablar de comparar la eficiencia real con las estimaciones de sillón.

En SQL Server, ¿cómo "piso" un DATETIME al segundo / minuto / hora / día / año?

Digamos que tengo una fecha de 2008-09-17 12: 56: 53.430 , luego la salida del piso debe ser:

  • Año: 2008-01-01 00: 00: 00.000
  • Mes: 2008-09-01 00: 00: 00.000
  • Día: 2008-09-17 00: 00: 00.000
  • Hora: 2008-09-17 12: 00: 00.000
  • Minuto: 2008-09-17 12: 56: 00.000
  • Segundo: 2008-09-17 12: 56: 53.000

Como PostgreSQL también es un "Servidor SQL", mencionaré

date_trunc()

Lo cual hace exactamente lo que estás preguntando con gracia.

Por ejemplo:

select date_trunc(''hour'',current_timestamp); date_trunc ------------------------ 2009-02-18 07:00:00-08 (1 row)


DateAdd junto con DateDiff puede ayudar a hacer muchas tareas diferentes. Por ejemplo, puede encontrar el último día de cualquier mes y puede encontrar el último día del mes anterior o el siguiente.

----Last Day of Previous Month SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) LastDay_PreviousMonth ----Last Day of Current Month SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) LastDay_CurrentMonth ----Last Day of Next Month SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)) LastDay_NextMonth

Source


En SQL Server aquí hay un pequeño truco para hacer eso:

SELECT CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS DATETIME)

Establece el DateTime en un flotante, que representa la fecha como la parte entera y el tiempo como la fracción de un día que pasó. Corta esa porción decimal, luego regresa a DateTime, y tienes la medianoche al comienzo de ese día.

Esto es probablemente más eficiente que todo el material DATEADD y DATEDIFF. Ciertamente es mucho más fácil escribir.


Hay varias formas de desollar a este gato =)

select convert(datetime,convert(varchar,CURRENT_TIMESTAMP,101))


He utilizado la respuesta de @ Portman muchas veces a lo largo de los años como referencia cuando las fechas del piso y han movido su funcionamiento a una función que puede serle útil.

No reclamo su rendimiento y simplemente lo proporciono como una herramienta para el usuario.

Le pido que, si decide votar esta respuesta, por favor también vote la respuesta de Portman @ , ya que mi código es un derivado de él.

IF OBJECT_ID(''fn_FloorDate'') IS NOT NULL DROP FUNCTION fn_FloorDate SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[fn_FloorDate] ( @Date DATETIME = NULL, @DatePart VARCHAR(6) = ''day'' ) RETURNS DATETIME AS BEGIN IF (@Date IS NULL) SET @Date = GETDATE(); RETURN CASE WHEN LOWER(@DatePart) = ''year'' THEN DATEADD(YEAR, DATEDIFF(YEAR, 0, @Date), 0) WHEN LOWER(@DatePart) = ''month'' THEN DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date), 0) WHEN LOWER(@DatePart) = ''day'' THEN DATEADD(DAY, DATEDIFF(DAY, 0, @Date), 0) WHEN LOWER(@DatePart) = ''hour'' THEN DATEADD(HOUR, DATEDIFF(HOUR, 0, @Date), 0) WHEN LOWER(@DatePart) = ''minute'' THEN DATEADD(MINUTE, DATEDIFF(MINUTE, 0, @Date), 0) WHEN LOWER(@DatePart) = ''second'' THEN DATEADD(SECOND, DATEDIFF(SECOND, ''2000-01-01'', @Date), ''2000-01-01'') ELSE DATEADD(DAY, DATEDIFF(DAY, 0, @Date), 0) END; END

Uso:

DECLARE @date DATETIME; SET @date = ''2008-09-17 12:56:53.430''; SELECT @date AS [Now],--2008-09-17 12:56:53.430 dbo.fn_FloorDate(@date, ''year'') AS [Year],--2008-01-01 00:00:00.000 dbo.fn_FloorDate(default, default) AS [NoParams],--2013-11-05 00:00:00.000 dbo.fn_FloorDate(@date, default) AS [ShouldBeDay],--2008-09-17 00:00:00.000 dbo.fn_FloorDate(@date, ''month'') AS [Month],--2008-09-01 00:00:00.000 dbo.fn_FloorDate(@date, ''day'') AS [Day],--2008-09-17 00:00:00.000 dbo.fn_FloorDate(@date, ''hour'') AS [Hour],--2008-09-17 12:00:00.000 dbo.fn_FloorDate(@date, ''minute'') AS [Minute],--2008-09-17 12:56:00.000 dbo.fn_FloorDate(@date, ''second'') AS [Second];--2008-09-17 12:56:53.000


Lástima que no es Oracle, o de lo contrario podrías usar trunc () o to_char ().

Pero tuve problemas similares con SQL Server y usé los métodos CONVERT () y DateDiff (), como se hace referencia here


La función CONVERT() puede hacer esto, dependiendo del estilo que use.


La clave es usar DATEADD y DATEDIFF junto con la enumeración apropiada de DATEADD SQL.

declare @datetime datetime; set @datetime = getdate(); select @datetime; select dateadd(year,datediff(year,0,@datetime),0); select dateadd(month,datediff(month,0,@datetime),0); select dateadd(day,datediff(day,0,@datetime),0); select dateadd(hour,datediff(hour,0,@datetime),0); select dateadd(minute,datediff(minute,0,@datetime),0); select dateadd(second,datediff(second,''2000-01-01'',@datetime),''2000-01-01''); select dateadd(week,datediff(week,0,@datetime),-1); --Beginning of week is Sunday select dateadd(week,datediff(week,0,@datetime),0); --Beginning of week is Monday

Tenga en cuenta que cuando se encuentre en el piso por segundo, a menudo obtendrá un desbordamiento aritmético si usa 0. Por lo tanto, elija un valor conocido que garantice que sea menor que la fecha en que está intentando plantar.