Si está buscando obtener un tipo de datos de fecha sin la hora, incluso si la hora es 00:00:00, entonces no tiene suerte, puede obtener un varchar pero la estructura es una fecha y hora y siempre tendrá algo de tiempo.
@Rohit Asume incorrectamente que 2008 es la única versión que le importa a la gente. (Hay más versiones en la naturaleza.) Los votos hablan por sí mismos.
hktegner
Respuestas:
2487
En SQL Server 2008adelante, debes CONVERTfechar:
SELECTCONVERT(date, getdate())
En versiones anteriores, puede hacer lo siguiente:
+1 Parece que este es un 35% más rápido que el método de doble conversión () comúnmente utilizado (que también he usado durante años). Buena esa.
Dane
8
El único inconveniente que puedo ver en su solución es que, a menos que sepa lo que está haciendo, es un poco obtuso. El uso del método de doble conversión hace que sus intenciones sean más obvias para los mantenedores de código futuros. Por cierto, no te he rechazado. Creo que también comenzaré a usar tu método. Gracias @aku
Jim Birchall
38
@pilavdzice Establecer una fecha y hora a la medianoche de ese día sí DEJA LA HORA ¿Qué resultado esperas? El datetimetipo de datos no puede tener tiempo en absoluto . Creo que está confundiendo el almacenamiento de datos con la presentación del usuario. Si todo lo que quiere es una forma de mostrarle a un usuario una cadena que no tiene una porción de tiempo (no ceros, solo espacios en blanco), entonces simplemente quiere Convert(varchar(30), @Date, 101)o algo similar. Consulte los Libros en pantalla de SQL Server • Transmitir y convertir para obtener más información.
ErikE
77
@ user1671639 el tipo de datos de fecha y hora siempre contiene una fecha y una hora, no se puede almacenar una sin la otra, a menos que esté utilizando SQL Server 2008, en cuyo caso también hay datos separados de 'fecha' y 'hora' tipos. Si usa CONVERT () así, realmente desea una cadena para su uso posterior, por lo que se quedará atrapado haciéndolo así, aunque sería mejor si usara funciones de formato de fecha en lugar de cortar la fecha, o mediante CAST(... AS DATE)o CONVERT(DATE, ...), que se ha mencionado con bastante frecuencia en esta misma página.
Magnus
10
Recomiendo cambiar la respuesta a SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)porque luego se ddpuede cambiar por cualquier otra datepartpalabra clave para truncar su datetimenivel arbitrario.
Michael - ¿Dónde está Clay Shirky?
717
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:
También existe el tipo de datos 'hora' en SQL2008 que responde a la otra mitad de la pregunta de separar la fecha y la hora.
misteraidan
8
Para su información, comparé diferentes métodos para recortar el tiempo de las fechas y este fue el método más rápido. De acuerdo, la diferencia fue pequeña, pero fue claramente más rápida en un gran número de ejecuciones.
@ Nick: este es el problema con DateTime. utilizar DateTime2en su lugar y funciona bien. sqlfiddle.com/#!6/9eecb7/2833
abatishchev
8
@Nick, para complementar la respuesta abatishchev, su @ date1 se 2015-10-01debe a DateTimelimitaciones. Pruébalo sin ningún yeso Date, ¡también cede 2015-10-01! declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1=>2015-10-01
Frédéric
44
Uno de estos trucos SQL fáciles de recordar. Como dice Mike, solo 2008 en adelante, pero, si encuentra un DB 2005 y anterior en algún lugar, puede tener muchos problemas :)
NicVerAZ
73
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 principalmente sobre estrategias de acceso a datos y no siempre revelan los costos implícitos involucrados en el tiempo de CPU que se tarda en realizar todas las piezas. Si ambas consultas se ejecutan en una tabla con millones de filas, el tiempo de CPU con DateDiff puede estar cerca de 1/3 del tiempo de conversión de CPU.
Para ver los planes de ejecución de consultas:
set showplan_text on
GO
Tanto DATEADD como DATEDIFF ejecutarán un CONVERT_IMPLICIT.
Aunque la solución CONVERT es más simple y fácil de leer para algunos, es más lenta. No es necesario volver a la fecha y hora (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 a datetime.
CONVERTIR SELECCIONAR (varchar, MyDate, 101) DESDE DatesTable
El uso de FLOOR () como @digi sugirió tiene un rendimiento más cercano a DateDiff, pero no se recomienda ya que transmitir el tipo de datos datetime a flotante y viceversa no siempre produce el valor original.
Recuerde muchachos: no le crean a nadie. ¡Mira las estadísticas de rendimiento y pruébalo tú mismo!
Tenga cuidado cuando esté probando sus resultados. Al seleccionar muchas filas para el cliente, se ocultará la diferencia de rendimiento porque lleva más tiempo enviar las filas a través de la red que realizar los cálculos. Por lo tanto, asegúrese de que el trabajo para todas las filas lo realiza el servidor, pero no se envía ningún conjunto de filas al cliente.
Parece haber confusión para algunas personas acerca de cuándo la optimización de caché afecta las consultas. Ejecutar dos consultas en el mismo lote o en lotes separados no tiene ningún efecto en el almacenamiento en caché. Por lo tanto, puede caducar el caché manualmente o simplemente ejecutar las consultas varias veces. Cualquier optimización para la consulta # 2 también afectaría las consultas posteriores, por lo tanto, descarte la ejecución # 1 si lo desea.
Ricardo C, buena investigación! ¿Qué versión de SQL Server usas? En el método MSSQL2000 con fechado, el rendimiento es un poco más rápido para mí.
aku
Solo para tener en cuenta, realicé la prueba 1000,000 veces. Para los escenarios del mundo real, la diferencia de rendimiento no será notable, supongo
aku
Aku, usé SQL Server 2005 Express para esta prueba. Trabajo en 2000 en el trabajo, y lo probaré con una tabla con más de 24 millones de filas y veré qué sale.
Ricardo C
Aku, mismos resultados. No hay diferencia en el rendimiento de más de diez millones de filas.
Ricardo C
55
Las afirmaciones sobre la igualdad de rendimiento no son ciertas. Por supuesto, los planes de ejecución serán los mismos. La medición del rendimiento en estos DEBE hacerse comparando el uso de la CPU, no examinando los planes de ejecución.
ErikE
51
Prueba esto:
SELECTCONVERT(VARCHAR(10),GETDATE(),111)
La declaración anterior convierte su formato actual a YYYY/MM/DD, consulte este enlace para elegir su formato preferido.
Este método no es el más rápido, y también enseña implícitamente a las personas que emitir fechas para flotar es preciso, lo cual no es así. Por favor vea esta publicación para más detalles.
ErikE
13
Si está utilizando SQL Server 2012 o versiones superiores ,
Ya hay múltiples respuestas y tipos de formato para el servidor SQL. Pero la mayoría de los métodos son algo 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 una mejor opción.
FORMAT ( value, format [, culture ])
La opción Cultura es muy útil, ya que puede especificar la fecha según sus espectadores.
Debe recordar d (para patrones pequeños) y D (para patrones largos).
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/201101/10/201101.10.20112011/10/1
US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result
---------------------------- ----------------------------- ----------------------------- ---------------------------------------
Saturday, October 01,201101 October 2011 Samstag,1. Oktober 20112011年10月1日
SI desea usar CONVERTIR y obtener el mismo resultado que en la pregunta original planteada, es decir, aaaa-mm-dd, entonces use el CONVERT(varchar(10),[SourceDate as dateTime],121)mismo código que las respuestas anteriores, pero el código para convertir a aaaa-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 tontos 'trucos' de gastos generales hasta SQL Server 2008, cuando los tipos de datos reales de datepart son introducido. Hacer tales conversiones en el nivel de datos es un gran desperdicio de gastos generales en su DBMS, pero lo más importante es que, en el momento en que hace algo como esto, básicamente ha creado datos huérfanos en memoria que supongo que luego volverá a un programa. No puede volver a colocarlo en otra columna 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 continuar y devolver su tipo de datos dateTime al programa de llamadas y, en el nivel PRESENTACIÓN, hacer los ajustes necesarios. Tan pronto como vaya a convertir 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 de ACTUALIZACIÓN o ELIMINACIÓN, de nuevo, a menos que realice algún tipo de reversión manual, que nuevamente exponga sus datos a un error humano / código / gremlin cuando no sea necesario.
Excepto, por ejemplo, si desea una consulta que recupere todos los registros que coincidan con una fecha proporcionada por el usuario como la parte de fecha de un determinado campo de tiempo. Buena suerte haciendo eso solo en la capa de presentación. (No necesita convertir, puede usar la aritmética de fechas, pero tiene la idea ...)
Andrew Lazarus
1
@ Andrew, ¿por qué importa eso? Usted dice WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);: no hay absolutamente ninguna razón para quitar tiempo de la columna.
Aaron Bertrand
1
@AaronBertrand Eso solo funciona asumiendo que la entrada @Datetiene una parte de tiempo cero. En caso de que eso no sea cierto, aún necesita saber cómo truncar los tiempos del lado del servidor. Estoy de acuerdo con esta respuesta en que el formato debe dejarse en la capa de presentación, pero no estoy de acuerdo con la implicación de que dejar eso para el front end significa que no tiene que saber una forma rápida de truncar.
Andrew Lazarus el
1
@ Andrew todo lo que tienes que hacer es hacer que el parámetro de entrada sea DATE. Mi punto es que nunca deberías tener que aplicar ningún tipo de truncamiento a la columna , a pesar de que ese es el primer instinto de la mayoría de las personas.
Aaron Bertrand
1
@AaronBertrand y eso supone que tiene control sobre el tipo de datos del parámetro. Bien en un procedimiento almacenado, no tan posible en otras situaciones. ¿Por qué no emitir para estar seguro de que el parámetro es del tipo que desea y necesita?
Todos estos métodos son geniales, pero ¿cuál sugieres usar?
eddiegroves
3
Tenga en cuenta que la versión "correcta" de los dos primeros es select dateadd(dd, datediff(dd, 0, getdate()), 0), porque los dds se pueden cambiar por cualquiera de las datepartpalabras clave para recortar la fecha en cualquier segmento que elija. (También tenga en cuenta que ddes solo una abreviatura de day.)
Michael - ¿Dónde está Clay Shirky el
10
Para obtener el resultado indicado, utilizo el siguiente comando.
Su primer ejemplo todavía tiene un componente de tiempo. El punto de la pregunta era cómo eliminar eso.
Zack
5
Incluso usando el antiguo MSSQL Server 7.0, el código aquí (cortesía de este enlace ) 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)
Produjo esta salida:
1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 2720151:14PM
2) Date/time in format MM-DD-YY:02-27-153) Date/time in format MM-DD-YYYY:02-27-20154) Date/time in format DD MON YYYY:27 Feb 20155) Date/time in format DD MON YY:27 Feb 156) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H):27 Feb 201513:14:46:630
select {fn current_date()} as todayfunciona para mi.
brianary
@brianary: eso es bueno, pero no es ANSI SQL.
encendido
Eso es bastante justo, y su respuesta es agradablemente portátil, pero pensé que mientras trabajemos con T-SQL, esto también funciona (y muestra que implementar ANSI CURRENT_DATE sería trivial para MS).
Tampoco le importa el local o hacer una doble conversión, aunque cada 'datepart' probablemente haga matemáticas. Por lo tanto, puede ser un poco más lento que el método anticuado, pero para mí es mucho más claro. Especialmente cuando quiero agrupar solo por año y mes (establezca el día en 1).
Puede usar lo siguiente para la parte de fecha y formatear la fecha:
DATENAME => Devuelve una cadena de caracteres que representa la fecha especificada parte de la fecha especificada
DATEADD => La DATEPART()función se utiliza 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 fecha especificada de la fecha especificada.
CONVERT()=> La CONVERT()función es una función general que convierte una expresión de un tipo de datos a otro. La
CONVERT()función se puede usar para mostrar datos de fecha / hora en diferentes formatos.
Respuestas:
En
SQL Server 2008
adelante, debesCONVERT
fechar:En versiones anteriores, puede hacer lo siguiente:
por ejemplo
me da
Pros:
varchar
<->datetime
conversioneslocale
Según lo sugerido por Michael
Usa esta variante:
SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Salida:
fuente
datetime
tipo de datos no puede tener tiempo en absoluto . Creo que está confundiendo el almacenamiento de datos con la presentación del usuario. Si todo lo que quiere es una forma de mostrarle a un usuario una cadena que no tiene una porción de tiempo (no ceros, solo espacios en blanco), entonces simplemente quiereConvert(varchar(30), @Date, 101)
o algo similar. Consulte los Libros en pantalla de SQL Server • Transmitir y convertir para obtener más información.CAST(... AS DATE)
oCONVERT(DATE, ...)
, que se ha mencionado con bastante frecuencia en esta misma página.SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)
porque luego sedd
puede cambiar por cualquier otradatepart
palabra clave para truncar sudatetime
nivel arbitrario.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:
fuente
Si usa SQL 2008 y superior:
fuente
DateTime2
en su lugar y funciona bien. sqlfiddle.com/#!6/9eecb7/28332015-10-01
debe aDateTime
limitaciones. Pruébalo sin ningún yesoDate
, ¡también cede2015-10-01
!declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1
=>2015-10-01
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 principalmente sobre estrategias de acceso a datos y no siempre revelan los costos implícitos involucrados en el tiempo de CPU que se tarda en realizar todas las piezas. Si ambas consultas se ejecutan en una tabla con millones de filas, el tiempo de CPU con DateDiff puede estar cerca de 1/3 del tiempo de conversión de CPU.
Para ver los planes de ejecución de consultas:
Tanto DATEADD como DATEDIFF ejecutarán un CONVERT_IMPLICIT.
Aunque la solución CONVERT es más simple y fácil de leer para algunos, es más lenta. No es necesario volver a la fecha y hora (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 a datetime.
CONVERTIR SELECCIONAR (varchar, MyDate, 101) DESDE DatesTable
SELECT DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) FROM DatesTable
El uso de FLOOR () como @digi sugirió tiene un rendimiento más cercano a DateDiff, pero no se recomienda ya que transmitir el tipo de datos datetime a flotante y viceversa no siempre produce el valor original.
Recuerde muchachos: no le crean a nadie. ¡Mira las estadísticas de rendimiento y pruébalo tú mismo!
Tenga cuidado cuando esté probando sus resultados. Al seleccionar muchas filas para el cliente, se ocultará la diferencia de rendimiento porque lleva más tiempo enviar las filas a través de la red que realizar los cálculos. Por lo tanto, asegúrese de que el trabajo para todas las filas lo realiza el servidor, pero no se envía ningún conjunto de filas al cliente.
Parece haber confusión para algunas personas acerca de cuándo la optimización de caché afecta las consultas. Ejecutar dos consultas en el mismo lote o en lotes separados no tiene ningún efecto en el almacenamiento en caché. Por lo tanto, puede caducar el caché manualmente o simplemente ejecutar las consultas varias veces. Cualquier optimización para la consulta # 2 también afectaría las consultas posteriores, por lo tanto, descarte la ejecución # 1 si lo desea.
Aquí hay un script de prueba completo y resultados de rendimiento que prueban que DateDiff es sustancialmente más rápido que la conversión a varchar.
fuente
Prueba esto:
La declaración anterior convierte su formato actual a
YYYY/MM/DD
, consulte este enlace para elegir su formato preferido.fuente
mm/dd/yyyy
formato.fuente
Para devolución en formato de fecha
El código anterior funcionará en SQL Server 2010
Regresará como 12/12/2013
Para SQL Server 2012 use el siguiente código
fuente
Puede usar la
CONVERT
función para devolver solo la fecha. Vea los enlaces a continuación:Manipulación de fecha y hora en SQL Server 2000
CAST y CONVERT
La sintaxis para usar la función de conversión es:
fuente
Si necesita el resultado como a
varchar
, debe pasar porque ya se mencionó anteriormente.
Si necesita un formato de fecha y hora, debe usar cualquiera de las consultas a continuación
fuente
fuente
Usando FLOOR () - solo corta parte del tiempo.
fuente
Si está utilizando SQL Server 2012 o versiones superiores ,
Utiliza la
Format()
función.Ya hay múltiples respuestas y tipos de formato para el servidor SQL. Pero la mayoría de los métodos son algo 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 una mejor opción.
La opción Cultura es muy útil, ya que puede especificar la fecha según sus espectadores.
Debe recordar d (para patrones pequeños) y D (para patrones largos).
1. "d" - Patrón de fecha corta.
2. "D" - Patrón de fecha larga.
Más ejemplos en consulta.
Si desea más formatos, puede ir a:
fuente
SI desea usar CONVERTIR y obtener el mismo resultado que en la pregunta original planteada, es decir, aaaa-mm-dd, entonces use el
CONVERT(varchar(10),[SourceDate as dateTime],121)
mismo código que las respuestas anteriores, pero el código para convertir a aaaa-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 tontos 'trucos' de gastos generales hasta SQL Server 2008, cuando los tipos de datos reales de datepart son introducido. Hacer tales conversiones en el nivel de datos es un gran desperdicio de gastos generales en su DBMS, pero lo más importante es que, en el momento en que hace algo como esto, básicamente ha creado datos huérfanos en memoria que supongo que luego volverá a un programa. No puede volver a colocarlo en otra columna 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 continuar y devolver su tipo de datos dateTime al programa de llamadas y, en el nivel PRESENTACIÓN, hacer los ajustes necesarios. Tan pronto como vaya a convertir 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 de ACTUALIZACIÓN o ELIMINACIÓN, de nuevo, a menos que realice algún tipo de reversión manual, que nuevamente exponga sus datos a un error humano / código / gremlin cuando no sea necesario.
fuente
WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);
: no hay absolutamente ninguna razón para quitar tiempo de la columna.@Date
tiene una parte de tiempo cero. En caso de que eso no sea cierto, aún necesita saber cómo truncar los tiempos del lado del servidor. Estoy de acuerdo con esta respuesta en que el formato debe dejarse en la capa de presentación, pero no estoy de acuerdo con la implicación de que dejar eso para el front end significa que no tiene que saber una forma rápida de truncar.Editar: Los dos primeros métodos son esencialmente los mismos y superan el método de conversión a varchar.
fuente
select dateadd(dd, datediff(dd, 0, getdate()), 0)
, porque losdd
s se pueden cambiar por cualquiera de lasdatepart
palabras clave para recortar la fecha en cualquier segmento que elija. (También tenga en cuenta quedd
es solo una abreviatura deday
.)Para obtener el resultado indicado, utilizo el siguiente comando.
Espero que sea útil.
fuente
fuente
Si está asignando los resultados a una columna o variable, dele el tipo DATE y la conversión es implícita.
fuente
Creo que esto funcionaría en tu caso:
fuente
fuente
De acuerdo, aunque llego un poco tarde :), esta es la otra solución.
Resultado
Y si está utilizando SQL Server 2012 y superior, puede usar una
FORMAT()
función como esta:fuente
Incluso usando el antiguo MSSQL Server 7.0, el código aquí (cortesía de este enlace ) me permitió obtener el formato de fecha que estaba buscando en ese momento:
Produjo esta salida:
fuente
Fecha:
Hora:
fuente
Simplemente puedes hacerlo de esta manera:
Salidas como:
O simplemente hazlo así:
Resultado:
fuente
¿por qué no usas DATE_FORMAT (your_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
'%d-%m-%Y'
partefuente
Sé que esto es viejo, pero no veo dónde alguien lo dijo de esta manera. Por lo que puedo decir, este es el estándar ANSI.
Sería bueno si Microsoft también pudiera soportar la variable ANSI CURRENT_DATE estándar.
fuente
select {fn current_date()} as today
funciona para mi.Estoy a favor de lo siguiente que no se mencionó:
Tampoco le importa el local o hacer una doble conversión, aunque cada 'datepart' probablemente haga matemáticas. Por lo tanto, puede ser un poco más lento que el método anticuado, pero para mí es mucho más claro. Especialmente cuando quiero agrupar solo por año y mes (establezca el día en 1).
fuente
A partir de SQL SERVER 2012, puede hacer esto:
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')
fuente
En SQL Server 2000
fuente
En este caso, solo fecha, vamos a ejecutar esta consulta:
CONVERTIR SELECCIONAR (VARCHAR (10), getdate (), 111);
fuente
Puede usar lo siguiente para la parte de fecha y formatear la fecha:
DATENAME => Devuelve una cadena de caracteres que representa la fecha especificada parte de la fecha especificada
DATEADD => La
DATEPART()
función se utiliza 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 fecha especificada de la fecha especificada.
CONVERT()
=> LaCONVERT()
función es una función general que convierte una expresión de un tipo de datos a otro. LaCONVERT()
función se puede usar para mostrar datos de fecha / hora en diferentes formatos.fuente