Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Validar si un dato tipo varchar se puede convertir a datetime

Estas en el tema de Validar si un dato tipo varchar se puede convertir a datetime en el foro de SQL Server en Foros del Web. hola Carnales, estoy en un aprieto, estoy desarrollando una aplicacion que me importara Archivos de texto plano a diferentes tablas en mi base de datos, ...
  #1 (permalink)  
Antiguo 30/01/2007, 17:59
 
Fecha de Ingreso: enero-2007
Mensajes: 11
Antigüedad: 17 años, 3 meses
Puntos: 0
Validar si un dato tipo varchar se puede convertir a datetime

hola Carnales, estoy en un aprieto, estoy desarrollando una aplicacion que me importara Archivos de texto plano a diferentes tablas en mi base de datos, para subir dicho archivo he creado un paquete DTS el cual ejecuto desde mi aplicacion, este archivo contiene dos campos cuyo destino es tipo datetime asi que lo que hago es cargarlos como varchar todos a una tabla en SQL y posteriormente hago ciertas validaciones a toda la informacion, tales como unidades de medida en catalogo, numeros de parte en catalogo, etc., y una validacion que no encuentro como hacerla es de los tipos de datos varchar que provocan error de rango de fechas al convertirlos a datetime, despues de que hago estas validaciones, utilizo un procedimiento almacenado para cargar toda esta informacion en las diferentes tablas de mi base de datos, pero si por X o por Y el archivo que me enviaron trae una fecha mal, tal como 00/00/0000, o peor aun 30/02/xxxx, pues nadamas truena, se acepatan sugerencias, toda la ayuda sera muy agradecida, sin mas, me despido.
  #2 (permalink)  
Antiguo 31/01/2007, 06:37
 
Fecha de Ingreso: enero-2007
Mensajes: 27
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Validar si un dato tipo varchar se puede convertir a datetime

Yo me crearia una función en Sql Server que me diga si el campo es tipo fecha.
Esta funcion devuelve un tipo Fecha en función de un String.
Manipulandola un poco podras conseguir lo que necesitas.

Una vez tengas la funcion hecha la usas en tus SQL's
Select ..... case when EsFecha(Campo) Then Campo else '' End .....

CREATE FUNCTION dbo.CDATE ( @FECHA nVarChar(10))
RETURNS SMALLDATETIME AS
BEGIN
DECLARE @TMPDate SMALLDATETIME, @UNCHAR NVARCHAR(1)
SET @UNCHAR=SUBSTRING(@FECHA,5,1)
IF (@UNCHAR='-' OR @UNCHAR='/')
SET @FECHA=DBO.DATEE(@FECHA,' ')

IF(@FECHA<>'' AND @FECHA <> '____-_-__' AND LEN(LTRIM(@FECHA))=10)
BEGIN
SET @TMPDate = Cast(@FECHA AS SMALLDATETIME)
--set @tmpdate = @fecha --'2004-12-12'
End
Else
SET @TMPDate = Cast('01-01-1900' AS SMALLDATETIME)
RETURN @TMPDate
END
  #3 (permalink)  
Antiguo 31/01/2007, 12:21
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Validar si un dato tipo varchar se puede convertir a datetime

Para saber si es o no fecha el valor ingresado ya existe una función de SQL
Código:
Select isdate('00/00/0000') [No es fecha]
      ,isdate('01/01/1978') [Si es fecha]
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 01/02/2007, 13:13
 
Fecha de Ingreso: enero-2007
Mensajes: 11
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Validar si un dato tipo varchar se puede convertir a datetime

eso es justo lo que andaba buscando, gracias andres, gracias netsistemas, los dos me han sido de mucha utilidad.
  #5 (permalink)  
Antiguo 23/03/2007, 17:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 8
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Validar si un dato tipo varchar se puede convertir a datetime

hola

oye una pregunta como envias a tu base de datos las fechas, lo que pasa es que tengo un elemento .text el cual contiene la fecha actual de mi pagina la cual utilizare para dar de alta algunos productos y quiero enviar esa fecha a un campo date time pero me marca un error Column name or number of supplied values does not match table definition. Podrias ayudarme???
  #6 (permalink)  
Antiguo 23/03/2007, 17:52
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: Validar si un dato tipo varchar se puede convertir a datetime

Que tal flizby.

Tienes dos alternativas.

1.- En el momento en que insertas, puedes usar la función getdate(), para insertar la fecha de ese momento ( incluido la hora).

2.- La mejor manera que he encontrado de manejar fechas en SQL server, es con el formato AAAAMMDD, de esta forma no hay error, es independiente de la configuración que tengas en SQL server.

Saludos y suerte!!
  #7 (permalink)  
Antiguo 07/08/2009, 08:41
Avatar de rgbarbieri  
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Validar si un dato tipo varchar se puede convertir a datetime

podes convertirlo de la siguiente manera y vas a recibir un recordset con el formato de fecha DD/MM/YYYY

select convert(smalldatetime,convert(varchar(10),ultimafe cha,103),103) from tabla
where campodatetime between '1900-01-01' and '2079-06-06'


Es importante restringir el rango de fechas que se encuentra en el where porque, son los rangos que maneja el tipo SMALLDATETIME, por ejemplo si en la base de datos hay una fecha cargada y esta supera al 2079 y no tuvieramos aplicado el rango de fechas que especifiqué en el where, entonces no va a funcionar y arrojaría el siguiente error:

Server: Msg 296, Level 16, State 3, Line 1
The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.


Otra cosa es que en el ejemplo devuelve la fecha en formato DD/MM/YYYY porque utilicé 103, en el siguiente link se muestra la tabla completa.

msdn.microsoft.com/es-es/library/ms182418.aspx

Espero que les sirva
Ruben
  #8 (permalink)  
Antiguo 07/08/2009, 08:47
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Busqueda Respuesta: Re: Validar si un dato tipo varchar se puede convertir a datetime

Cita:
Iniciado por flizby Ver Mensaje
hola

oye una pregunta como envias a tu base de datos las fechas, lo que pasa es que tengo un elemento .text el cual contiene la fecha actual de mi pagina la cual utilizare para dar de alta algunos productos y quiero enviar esa fecha a un campo date time pero me marca un error Column name or number of supplied values does not match table definition. Podrias ayudarme???
Parece un error de sintanxis...podrias escribir el comando que estas enviando a la bd o el stored procedure que realiza el insert??

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:21.