2010-09-01 16 views
8

Necesito convertir campos de fecha y hora a un tipo INT con formato específico. Por ejemplo, quiero 2000-01-01 00:00:00.000 para convertir a 20010101.Forma más eficaz de convertir DateTime a formato Int

Cuál es la forma mas potente para hacer que la conversión para la comparación en una consulta?

Algo así como:

DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 + 
    DATEPART(day, orderdate) 

o

cast(convert(char(8), orderdate, 112) as int) 

Cuál es la forma mas potente para hacer esto?

+2

Respuesta sencilla: probar ambos y ver que es "mejor" (por ejemplo, más rápido, consume menos CPU, utiliza menos lecturas/escrituras, etc.) ¿Cómo –

+2

01 jan 2000 convertirse en "20100101" por favor? – gbn

+0

Vaya, cuando hago un error tipográfico. :) – DavidStein

Respuesta

19

Su ejemplo de cast(convert(char(8), orderdate, 112) as int) parece bien a mí. Rápidamente le da la fecha al formato que necesita y convierte a un int.

Desde el punto de vista del plan de ejecución, no parece haber ninguna diferencia entre los dos.

-1

Es esto lo que necesita

SELECT REPLACE(CONVERT(VARCHAR(10),'2010-01-01 00:00:00.000',101),'-','') 
+1

Eso es mucho más trabajo que 'cast (convert (char (8), orderdate, 112) como int)', que funcionará igual de bien. Su ejemplo ni siquiera tiene en cuenta la conversión a INT. – LittleBobbyTables

-2

cuando se pasa '2010-01-01 00: 00: 00.000' directamente en el código, la instrucción SELECT lo mira como una cadena y no un tipo de datos de fecha y hora. No es lo mismo que seleccionar un campo de fecha y hora directamente.

No hay necesidad de hacer REPARTO exterior porque SQL Server va a hacer la conversión implícita, aquí es una prueba.

DECLARE @t DATETIME = '2010-01-10 00:00:00.000',@u INT 
SELECT @u = CONVERT(CHAR(8), @t, 112) 

IF ISNUMERIC(@u) = 1 
PRINT 'Integer' 
+0

Tal vez a lo que se refiere es a este 'SELECCIONAR CONVERTIR (INT, CAST (' 2013-08-05 09:23:30 'como DATETIME)) 'viene de [aquí] (https://msdn.microsoft.com/en -us/library/ms187928.aspx) la conversión es ** implícita ** – DanielV

Cuestiones relacionadas