2009-06-24 24 views

Respuesta

12
CONVERT(varchar(8), @ParamDate, 112) -- Supported way 

CAST(FLOOR(CAST(@ParamDate AS float)) AS DATETIME) -- Unsupported way 
+1

Uso el "modo no admitido" aquí todo el tiempo. ¿Qué pasa con el número mágico 112 en la primera línea? – Jeffrey

+4

Es el especificador de formato para la fecha. Consulte http://msdn.microsoft.com/en-us/library/ms187928.aspx –

+2

Correcto. Y tenga en cuenta que solo 112 es correcto porque es un formato ISO (a diferencia de los formatos dependientes de la configuración regional). – GSerg

0

probablemente una manera más limpia y más portátil para hacer esto, pero mis años modismo es:

insert into tbl (date_column) 
select convert(varchar, convert (datetime, '2009-06-24 09:52:43.000'), 101) 
1

fundido a una fecha, y luego se puede utilizar CONVERT para obtener sólo la fecha.

INSERT MyTable(Column1) 
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112) 
+4

Chicos, ¿por qué todos usan el formato 101? Depende de la configuración regional, solo está bien en la configuración regional EN-US.En EN-GB ya no es como en el Reino Unido es dd/mm/aaaa, no mm/dd/aaaa. Usa el 112, no depende de nada. – GSerg

+0

Acepto no usar 101, use 112 aka ISO o 102 ANSI. – DBAndrew

+0

Estoy de acuerdo: generalmente uso 112 para el desarrollo, pero en general el 101 parece más legible en el resultado cuando se ejecuta el código de muestra. –

0

Si usted siempre tendrá la fecha en el mismo formato, es decir AAAA-MM-DD se puede agarrar los primeros 10 caracteres si el valor e inserte lo que es la equivelant de 00: 00: 00.0000 tiempo para esa fecha.

select left('2009-12-32 4:32:00',10) 

Esta es una forma muy eficiente de hacer esto ya que requerirá does't convertir tipos de datos Sin embargo, se requiere que la fecha siempre será formateado con un año de cuatro dígitos y dos dígito Día & mes.

0

Una variedad de cortes:

  • convertir su cadena a una fecha y hora, y luego volver de nuevo utilizando el parámetro opcional "estilo" a convert para convertir su fecha y hora a una cadena utilizando sólo la parte de fecha
  • uso substring a cortar el extremo
  • alrededor de la fecha y hora usando floor
10
declare @originalDate datetime 
select @originalDate = '2009-06-24 09:52:43.000' 

declare @withoutTime datetime 
select @withoutTime = dateadd(d, datediff(d, 0, @originalDate), 0) 

select @withoutTime 
+0

Esta es la solución genial y elegante ... pero solo funciona si el valor de entrada es, de hecho, una fecha y hora. Si comienzas con una cadena (varchar), primero debes convertirla a una fecha y hacer eso con 100% de precisión es uno de los mayores dolores de cabeza en la programación. –

2

James es correcto. Si comienzas con una cadena y el formato siempre será el que dices, entonces lo mantendrás simple y eficiente. Use LEFT(@StrDate, 10) y CONVERT que a su valor de fecha y hora. Hecho.

Si su cadena de entrada podría ser any formato de fecha/hora válido, primero tiene que usar CONVERT(datetime, @StrDate). Después de eso vas con lo que Bing acaba de decir para quitarle la parte del tiempo.

+0

+1 para leer más que el título * heeh * – Andomar

-2

de Gaza el tiempo, y lo echará hasta la fecha:

select cast(left(yourstring, 10) as datetime) 
+0

Esto se basa en el formato del tiempo en un primer formato de fecha. No puede suponer que esto sea verdadero en todos los formatos de fecha y hora de cadenas. –

5
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME) 

SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME) 
+0

Funcionó. Gracias..... – METALHEAD

1

una mejora a la versión no soportada: No estoy seguro de si esto puede afectar a cualquier actuación. getdate() es una marca de tiempo de entrada en mi consulta.

select cast(cast(getdate() as DATE) as DATETIME)

0

he encontrado que la fundición como una fecha, a continuación, a una fecha y hora para ser muy eficaz e intuitiva.

SELECT CAST(CAST(GETDATE() as date) as datetime) 
Cuestiones relacionadas