solo obtener minutos manejo insertar hora fechas fecha ejemplo sql sql-server tsql date datetime

obtener - Cómo devolver solo la fecha de un tipo de datos DateTime de SQL Server



obtener hora sql server (30)

SELECT GETDATE()

Devoluciones: 2008-09-22 15:24:13.790

Quiero esa parte de la fecha sin la parte del tiempo: 2008-09-22 00:00:00.000

¿Cómo puedo conseguir eso?


Si está utilizando SQL Server 2012 o versiones anteriores ,

Utilice la función Format() .

Ya hay múltiples respuestas y tipos de formato para el servidor SQL. Pero la mayoría de los métodos son un tanto ambiguos y sería difícil para usted recordar los números para el tipo de formato o las funciones con respecto al Formato de fecha específico. Es por eso que en las próximas versiones del servidor SQL hay mejor opción.

FORMAT ( value, format [, culture ] )

La opción de cultura es muy útil, ya que puede especificar la fecha según sus espectadores.

Tienes que recordar d (para patrones pequeños) y D (para patrones largos).

1. "d" - Patrón de fecha corta.

2009-06-15T13:45:30 -> 6/15/2009 (en-US) 2009-06-15T13:45:30 -> 15/06/2009 (fr-FR) 2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

2. "D" - Patrón de fecha larga.

2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US) 2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU) 2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)

Más ejemplos en consulta.

DECLARE @d DATETIME = ''10/01/2011''; SELECT FORMAT ( @d, ''d'', ''en-US'' ) AS ''US English Result'' ,FORMAT ( @d, ''d'', ''en-gb'' ) AS ''Great Britain English Result'' ,FORMAT ( @d, ''d'', ''de-de'' ) AS ''German Result'' ,FORMAT ( @d, ''d'', ''zh-cn'' ) AS ''Simplified Chinese (PRC) Result''; SELECT FORMAT ( @d, ''D'', ''en-US'' ) AS ''US English Result'' ,FORMAT ( @d, ''D'', ''en-gb'' ) AS ''Great Britain English Result'' ,FORMAT ( @d, ''D'', ''de-de'' ) AS ''German Result'' ,FORMAT ( @d, ''D'', ''zh-cn'' ) AS ''Chinese (Simplified PRC) Result''; US English Result Great Britain English Result German Result Simplified Chinese (PRC) Result ---------------- ----------------------------- ------------- ------------------------------------- 10/1/2011 01/10/2011 01.10.2011 2011/10/1 US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result ---------------------------- ----------------------------- ----------------------------- --------------------------------------- Saturday, October 01, 2011 01 October 2011 Samstag, 1. Oktober 2011 2011年10月1日

Si quieres más formatos, puedes ir a:

  1. Cadenas de formato de fecha y hora estándar
  2. Cadenas de formato de fecha y hora personalizadas

¿por qué no usa DATE_FORMAT (su_datetiem_column, ''% d-% m-% Y'')?

EX: select DATE_FORMAT( some_datetime_column, ''%d-%m-%Y'' ) from table_name

puede cambiar la secuencia de m, d y año reorganizando la parte ''%d-%m-%Y''


A partir de SQL SERVER 2012, puedes hacer esto:

SELECT FORMAT(GETDATE(), ''yyyy-MM-dd 00:00:00.000'')


Bueno, aunque llego un poco tarde :), aquí está la otra solución.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

Resultado

2008-09-22 00:00:00.000

Y si está utilizando SQL Server 2012 y superior, puede usar la función FORMAT() esta manera:

SELECT FORMAT(GETDATE(), ''yyyy-MM-dd'')


Creo que esto funcionaría en tu caso:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate //here date is obtained as 1990/09/25


DATEADD y DATEDIFF son mejores que CONVERTIR a varchar. Ambas consultas tienen el mismo plan de ejecución, pero los planes de ejecución son primordialmente sobre estrategias de acceso a datos y no siempre revelan los costos implícitos involucrados en el tiempo de CPU necesario para realizar todas las piezas. Si ambas consultas se ejecutan en una tabla con millones de filas, ¡el tiempo de CPU que usa DateDiff puede estar cerca de 1/3 del tiempo de conversión de CPU!

Para ver los planes de ejecución de las consultas:

set showplan_text on GO

Tanto DATEADD como DATEDIFF ejecutarán un CONVERT_IMPLICIT.

Si bien la solución CONVERT es más simple y fácil de leer para algunos, es más lenta. No es necesario volver a datetime (esto lo hace implícitamente el servidor). Tampoco hay una necesidad real en el método DateDiff para DateAdd después, ya que el resultado entero también se convertirá implícitamente de nuevo a datetime.

SELECCIONE CONVERTIR (varchar, MyDate, 101) DESDE la tabla de fechas

|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101))) |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

SELECCIONAR DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) DE DatesTable

|--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,''1900-01-01 00:00:00.000'',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0)))) |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

El uso de FLOOR () como @digi sugirió tiene un rendimiento más cercano al de DateDiff, pero no se recomienda ya que convertir el tipo de datos datetime en float y back no siempre produce el valor original.

Recuerden chicos: no le crean a nadie. ¡Mire las estadísticas de rendimiento y pruébelo usted mismo!

Ten cuidado cuando estés probando tus resultados. La selección de muchas filas al cliente ocultará la diferencia de rendimiento, ya que demora más en enviar las filas a través de la red que en realizar los cálculos. Por lo tanto, asegúrese de que el servidor realiza el trabajo de todas las filas, pero no se envía ningún conjunto de filas al cliente.

Parece que hay confusión para algunas personas acerca de cuándo la optimización del caché afecta las consultas. La ejecución de dos consultas en el mismo lote o en lotes separados no tiene ningún efecto en el almacenamiento en caché. Por lo tanto, puede expirar el caché manualmente o simplemente ejecutar las consultas de un lado a otro varias veces. Cualquier optimización para la consulta # 2 también afectaría cualquier consulta posterior, así que deseche la ejecución # 1 si lo desea.

Aquí hay un script de prueba completo y resultados de rendimiento que demuestran que DateDiff es sustancialmente más rápido que la conversión a varchar.


En SQL Server 2008 y superior, debe CONVERT hasta la fecha:

SELECT CONVERT(date, getdate())

En versiones anteriores, puedes hacer lo siguiente:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

por ejemplo

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

me da

2008-09-22 00:00:00.000

Pros:

  • No se requieren conversiones varchar <-> datetime
  • No hay necesidad de pensar en locale

En SQL Server 2000

CAST( ( STR( YEAR( GETDATE() ) ) + ''/'' + STR( MONTH( GETDATE() ) ) + ''/'' + STR( DAY( GETDATE() ) ) ) AS DATETIME)


Esto faltaba en todas las respuestas, puede que no sea el más eficiente, pero es muy fácil de escribir y entender, no se necesita estilo, no hay funciones de fecha complejas.

SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))


Estoy a favor de lo siguiente que no fue mencionado:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

Tampoco le importa lo local o hacer un doble conversión, aunque cada ''datepart'' probablemente haga matemáticas. Por lo tanto, puede ser un poco más lento que el método fechado, pero para mí es mucho más claro. Especialmente cuando quiero agrupar solo por año y mes (establecer el día en 1).


Fecha:

SELECT CONVERT(date, GETDATE()) SELECT CAST(GETDATE() as date)

Hora:

SELECT CONVERT(time , GETDATE() , 114) SELECT CAST(GETDATE() as time)


Incluso utilizando el antiguo MSSQL Server 7.0, el código aquí (cortesía de este link ) me permitió obtener el formato de fecha que estaba buscando en ese momento:

PRINT ''1) Date/time in format MON DD YYYY HH:MI AM (OR PM): '' + CONVERT(CHAR(19),GETDATE()) PRINT ''2) Date/time in format MM-DD-YY: '' + CONVERT(CHAR(8),GETDATE(),10) PRINT ''3) Date/time in format MM-DD-YYYY: '' + CONVERT(CHAR(10),GETDATE(),110) PRINT ''4) Date/time in format DD MON YYYY: '' + CONVERT(CHAR(11),GETDATE(),106) PRINT ''5) Date/time in format DD MON YY: '' + CONVERT(CHAR(9),GETDATE(),6) PRINT ''6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): '' + CONVERT(CHAR(24),GETDATE(),113)

Se produjo esta salida:

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015 1:14PM 2) Date/time in format MM-DD-YY: 02-27-15 3) Date/time in format MM-DD-YYYY: 02-27-2015 4) Date/time in format DD MON YYYY: 27 Feb 2015 5) Date/time in format DD MON YY: 27 Feb 15 6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630


Para obtener el resultado indicado, uso el siguiente comando.

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

Yo holpe es útil.


Prueba esto:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

La declaración anterior convierte su formato actual a YYYY/MM/DD , consulte este enlace para elegir su formato preferible.



Puede usar lo siguiente para la parte de la fecha y el formato de la fecha:

DATENAME => Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha especificada

DATEADD => La función DATEPART() se usa para devolver una sola parte de una fecha / hora, como año, mes, día, hora, minuto, etc.

DATEPART => Devuelve un entero que representa la parte de la fecha especificada de la fecha especificada.

CONVERT() => La función CONVERT() es una función general que convierte una expresión de un tipo de datos a otro. La función CONVERT() se puede usar para mostrar datos de fecha / hora en diferentes formatos.


SQLServer 2008 ahora tiene un tipo de datos de "fecha" que contiene solo una fecha sin componente de tiempo. Cualquier persona que use SQLServer 2008 y más allá puede hacer lo siguiente:

SELECT CONVERT(date, GETDATE())


Si desea usar CONVERTIR y obtener el mismo resultado que en la pregunta original planteada, es decir, aaaa-mm-dd, use CONVERT(varchar(10),[SourceDate as dateTime],121) mismo código que el par de respuestas anteriores , pero el código para convertir a yyyy-mm-dd con guiones es 121.

Si puedo acceder a mi caja de jabón por un segundo, este tipo de formato no pertenece al nivel de datos , y es por eso que no fue posible sin ''trucos'' de alta sobrecarga hasta SQL Server 2008 cuando los tipos de datos de la fecha real son introducido. Realizar tales conversiones en el nivel de datos es una gran pérdida de gastos generales en su DBMS, pero lo más importante es que en el segundo que haga algo como esto, básicamente ha creado datos huérfanos en la memoria que supongo que luego volverá a un programa. No puede volver a colocarlo en otra columna de 3NF + ni compararlo con nada escrito sin revertir, por lo que todo lo que ha hecho es introducir puntos de falla y eliminar la referencia relacional.

SIEMPRE debe seguir adelante y devolver su tipo de datos de fecha y hora al programa de llamada y en el nivel de PRESENTACIÓN, hacer los ajustes necesarios. Tan pronto como vaya convirtiendo las cosas antes de devolverlas a la persona que llama, está eliminando toda esperanza de integridad referencial de la aplicación. Esto evitaría una operación ACTUALIZAR o BORRAR, nuevamente, a menos que haga algún tipo de reversión manual, lo que nuevamente está exponiendo sus datos a un error humano / código / gremlin cuando no hay necesidad.


Si está asignando los resultados a una columna o variable, asígnele el tipo DATE y la conversión es implícita.

DECLARE @Date DATE = GETDATE() SELECT @Date --> 2017-05-03


Si necesita un resultado en el tipo de datos varchar debe pasar por

SELECT CONVERT(DATE, GETDATE()) --2014-03-26 SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

que ya se ha mencionado anteriormente

Si necesita resultados en formato de fecha y hora, debe pasar por cualquiera de las siguientes consultas

1) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 111)) como OnlyDate --2014-03-26 00: 00: 00.000

2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112)) como OnlyDate --2014-03-26 00: 00: 00.000

3)

DECLARE @OnlyDate DATETIME SET @OnlyDate = DATEDIFF(DD, 0, GETDATE()) SELECT @OnlyDate AS OnlyDate

--2014-03-26 00: 00: 00.000


Si usa SQL 2008 y superior:

select cast(getdate() as date)


Simplemente puedes hacerlo de esta manera:

SELECT CONVERT(date, getdate()) SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date)) SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

Salidas como:

2008-09-22 00:00:00.000

O simplemente haz esto:

SELECT CONVERT (DATE, GETDATE()) ''Date Part Only''

Resultado:

Date Part Only -------------- 2013-07-14


Usando FLOOR () - simplemente cortar parte del tiempo.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)


La fecha (campo de fecha y hora) y DATE_FORMAT (fecha y hora, ''% Y-% m-% d'') devuelven solo la fecha desde la fecha y la hora


Para devolución en formato de fecha.

CAST (Fecha de la fecha del pedido)

El código anterior funcionará en el servidor SQL 2010

Volverá como 12/12/2013

Para SQL Server 2012 use el siguiente código

CONVERT(VARCHAR(10), OrderDate , 111)


Convert(nvarchar(10), getdate(), 101) ---> 5/12/14 Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014


DECLARE @yourdate DATETIME = ''11/1/2014 12:25pm'' SELECT CONVERT(DATE, @yourdate)


SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21 SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011


SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))


SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0) SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE())) SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

Edición: los dos primeros métodos son esencialmente los mismos y realizan el método de conversión a varchar.