yyyymmdd yyyy fecha ejemplos convert sql sql-server sql-server-2008 tsql type-conversion

yyyy - Convierta varchar en datetime en SQL Server



convert varchar to datetime sql server yyyymmdd (13)

Convertir sería la respuesta normal, pero el formato no es un formato reconocido para el convertidor, mm / dd / aaaa podría convertirse usando convert (datetime, yourdatestring, 101) pero no tiene ese formato por lo que falla.

El problema es que el formato no es estándar, tendrá que manipularlo a un nivel que el converso pueda comprender de entre los disponibles.

Hackeado juntos, si puedes garantizar el formato

declare @date char(8) set @date = ''12312009'' select convert(datetime, substring(@date,5,4) + substring(@date,1,2) + substring(@date,3,2),112)

¿Cómo convierto una cadena de formato mmddyyyy en datetime en SQL Server 2008?

Mi columna de destino está en DateTime

Lo he intentado con Convert y con la mayoría de los valores de estilo de Date , sin embargo recibo un mensaje de error:

''La conversión de un tipo de datos varchar a un tipo de datos datetime resultó en un valor fuera de rango.''


Creo que CONVERT es la mejor opción, ya que puedes incluir un estilo (formato de fecha), por lo que el valor predeterminado de EE. UU. Sería 110, que es mm-dd-aaaa.



Es probable que tengas datos malos que no se pueden convertir. Las fechas nunca deben almacenarse en varchar, ya que permitirán fechas como ASAP o el 30/02/2009. Use la función isdate () en sus datos para encontrar los registros que no se pueden convertir.

De acuerdo, probé con buenos datos conocidos y aún recibí el mensaje. Necesita convertir a un formato diferente porque no sabe si 12302009 es mmddyyyy o ddmmyyyy. El formato de aaaammdd no es ambiguo y SQL Server lo convertirá correctamente

Tengo esto para trabajar:

cast( right(@date,4) + left(@date,4) as datetime)

Sin embargo, recibirá un mensaje de error si tiene alguno que se encuentre en un formato no estándar como ''112009'' o algún valor de texto o una fecha fuera de rango real.


Esta parece la forma más fácil ...

SELECT REPLACE(CONVERT(CHAR(10), GETDATE(), 110),''-'','''')


La causa principal de este problema puede estar en la configuración regional: DB esperando YYYY-MM-DD mientras se encuentra una aplicación, por ejemplo, DD-MM-YYYY (formato de configuración regional en ruso) tal como estaba en mi caso. Todo lo que hice fue cambiar el formato de la configuración regional de ruso a inglés (Estados Unidos) y voilà.


Las fechas estándar de SQL durante la inserción o actualización deben estar entre 1/1/1753 12:00:00 AM y 12/31/9999 11:59:59 PM.

Entonces, si está insertando / actualizando debajo del 1/1/1753, obtendrá este error.


Mire CAST / CONVERT en BOL que debería ser un comienzo.

Si su columna de destino es de datetime y datetime , no necesita convertirla, SQL lo hará por usted.

De otra manera

CONVERT(datetime, ''20090101'')

Deberías hacerlo.

Este es un link que también debería ayudar:


OP quiere mmddyy y una conversión simple no funcionará para eso:

select convert(datetime,''12312009'') Msg 242, Level 16, State 3, Line 1 The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value

así que prueba esto:

DECLARE @Date char(8) set @Date=''12312009'' SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))

SALIDA:

----------------------- 2009-12-31 00:00:00.000 (1 row(s) affected)


SQL Server puede convertir implícitamente cadenas en forma de ''AAAAMMDD'' a una fecha y hora; todas las demás cadenas deben emitirse explícitamente. aquí hay dos bloques de código rápido que harán la conversión desde el formulario del que está hablando:

la versión 1 usa variables unitarias:

BEGIN DECLARE @input VARCHAR(8), @mon CHAR(2), @day char(2), @year char(4), @output DATETIME SET @input = ''10022009'' --today''s date SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4) SELECT @output = @year+@mon+@day SELECT @output END

la versión 2 no usa variables de unidad:

BEGIN DECLARE @input CHAR(8), @output DATETIME SET @input = ''10022009'' --today''s date SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2) SELECT @output END

Ambos casos dependen de la capacidad del servidor SQL para realizar esa conversión implícita.


Tuve suerte con algo similar:

Convert(DATETIME, CONVERT(VARCHAR(2), @Month) + ''/'' + CONVERT(VARCHAR(2), @Day) + ''/'' + CONVERT(VARCHAR(4), @Year))


Yo usaría STUFF para insertar caracteres divisorios y luego usar CONVERT con el estilo apropiado. Algo como esto:

DECLARE @dt VARCHAR(100)=''111290''; SELECT CONVERT(DATETIME,STUFF(STUFF(@dt,3,0,''/''),6,0,''/''),3)

Primero usa dos veces STUFF para obtener 11/12/90 en vez de 111290, que usa el 3 para convertir esto a datetime y datetime (o cualquier otro formato de ajuste: use . Para alemán, - para británico ...) Más detalles sobre CAST and CONVERT

Lo mejor fue almacenar correctamente los valores de fecha y hora.

  • Esto debería ser "formato universal no yyyyMMdd " yyyyMMdd
  • o (especialmente dentro de XML) debería ser ISO8601: yyyy-MM-dd o yyyy-MM-ddThh:mm:ss Más detalles sobre ISO8601

Cualquier formato específico de cultura generará problemas tarde o temprano ...


use Try_Convert: devuelve un valor de conversión al tipo de datos especificado si el lanzamiento tiene éxito; de lo contrario, devuelve nulo.

DECLARE @DateString VARCHAR(10) =''20160805'' SELECT TRY_CONVERT(DATETIME,@DateString) SET @DateString =''Invalid Date'' SELECT TRY_CONVERT(DATETIME,@DateString)

Enlace: MSDN TRY_CONVERT (Transact-SQL)