Elegir el Tipo de Dato Fecha Apropiado

11/07/2008 - 17:58 por Emerson | Informe spam
Hola a Todos:
Bueno resulta que he leido que para manejar el tipo de datos fechas de SQL
es mejor manejarlo con dato ANSI (yyyymmdd), el cual nos evita muchos
problemas, mi pregunta es, que tipo de datos debe tener la tabla para que
esta opcion de manejar dicho tipo de dato sea la mas optima, o sea si creo
una tabla qeu tipo de datos debo asignarle al campo Fecha, varchar(8),
char(8), datetime, para que esta columna Fecha trabaje con el dato ANSI que
le voy a comparar. No se si me explique bien pero le pongo un pequeño
ejemplo:

Select Col1, Col2, Col3
From MiTabla
Where ColFecha='yyyymmdd'

Donde: Colfecha es un campo que almacena un tipo de dato fecha, que tipo
deberiade ser? varchar(8), char(8), datetime?? y por que, cual seria la
diferencia el uno del otro campo a asignarle.


*Uso SQL2000 SP4, WinXP
Y Como seria el mismo tema si Trabajaria con SQL 2005.


Saludos Coordiales y Gracias de Antemano a Todos

Emerson Q.

Preguntas similare

Leer las respuestas

#1 Jhonny Vargas P.
11/07/2008 - 18:09 | Informe spam
Hola Emerson,

Para esto existe "datetime" para almacenar una fecha, la forma en que
insertas o muestras al usuario esta información no tiene nada que ver en
como la almacenes.

Para hacer búsquedas sobre estos campos puedes usar el formato iso yyyymmdd
ejemplo: select campo1, campo2 from tabla where campofecha = '20080626'

Cuando devuelves una fecha, en tu aplicación le das el formato que quieras,
si considerás el idioma, nacionalidad,lo que sea.

Saludos,
Jhonny Vargas P.




"Emerson" escribió en el mensaje de
noticias:#$
Hola a Todos:
Bueno resulta que he leido que para manejar el tipo de datos fechas de SQL
es mejor manejarlo con dato ANSI (yyyymmdd), el cual nos evita muchos
problemas, mi pregunta es, que tipo de datos debe tener la tabla para que
esta opcion de manejar dicho tipo de dato sea la mas optima, o sea si creo
una tabla qeu tipo de datos debo asignarle al campo Fecha, varchar(8),
char(8), datetime, para que esta columna Fecha trabaje con el dato ANSI
que le voy a comparar. No se si me explique bien pero le pongo un pequeño
ejemplo:

Select Col1, Col2, Col3
From MiTabla
Where ColFecha='yyyymmdd'

Donde: Colfecha es un campo que almacena un tipo de dato fecha, que tipo
deberiade ser? varchar(8), char(8), datetime?? y por que, cual seria la
diferencia el uno del otro campo a asignarle.


*Uso SQL2000 SP4, WinXP
Y Como seria el mismo tema si Trabajaria con SQL 2005.


Saludos Coordiales y Gracias de Antemano a Todos

Emerson Q.

Respuesta Responder a este mensaje
#2 Alejandro Mesa
11/07/2008 - 19:40 | Informe spam
Emerson,

Ademas de lo escrito por Jhonny, quiero agregar que SQL Server usa 8 bytes
para almacenar el tipo de data datetime, 4 bytes para la fecha, que indican
los dias transcurridos antes o despues de 01/01/1900 y 4 para el tiempo, que
indican el numero de 1/300 unidades transcurridas desde la media noche. SQL
Server no usa ningun formato en especifico para almacenar esa informacion.

Ahora, cuando queremos pasar un dato tipo datetime como constante, debemos
usar una cadena de caracteres, correcto. SQL Server va a interpretar esa
cadena de acuerdo al formato que esta tenga. Si el formato es independiente
de el lenguaje en uso, como ISO o ISO8601, entonces no habra ningun problema,
pero si el formato es dependiente, como U.S. o British, entonces si puede
haber problemas si el codigo se ejecuta en servidor con diferente lenguaje al
que se espera.

Lo anterior no indica que debemos usar otro tipo de data para almacenar
fechas en SQL Server, sino que debemos usar formatos independientes de el
lenguaje, lo mas posible.


AMB


"Emerson" wrote:

Hola a Todos:
Bueno resulta que he leido que para manejar el tipo de datos fechas de SQL
es mejor manejarlo con dato ANSI (yyyymmdd), el cual nos evita muchos
problemas, mi pregunta es, que tipo de datos debe tener la tabla para que
esta opcion de manejar dicho tipo de dato sea la mas optima, o sea si creo
una tabla qeu tipo de datos debo asignarle al campo Fecha, varchar(8),
char(8), datetime, para que esta columna Fecha trabaje con el dato ANSI que
le voy a comparar. No se si me explique bien pero le pongo un pequeño
ejemplo:

Select Col1, Col2, Col3
From MiTabla
Where ColFecha='yyyymmdd'

Donde: Colfecha es un campo que almacena un tipo de dato fecha, que tipo
deberiade ser? varchar(8), char(8), datetime?? y por que, cual seria la
diferencia el uno del otro campo a asignarle.


*Uso SQL2000 SP4, WinXP
Y Como seria el mismo tema si Trabajaria con SQL 2005.


Saludos Coordiales y Gracias de Antemano a Todos

Emerson Q.



Respuesta Responder a este mensaje
#3 Emerson
11/07/2008 - 23:47 | Informe spam
Muchas Gracias por tu respuesta Jhonny.
Saludos...

Emerson Q.

"Jhonny Vargas P." escribió en el mensaje
news:
Hola Emerson,

Para esto existe "datetime" para almacenar una fecha, la forma en que
insertas o muestras al usuario esta información no tiene nada que ver en
como la almacenes.

Para hacer búsquedas sobre estos campos puedes usar el formato iso
yyyymmdd ejemplo: select campo1, campo2 from tabla where campofecha =
'20080626'

Cuando devuelves una fecha, en tu aplicación le das el formato que
quieras, si considerás el idioma, nacionalidad,lo que sea.

Saludos,
Jhonny Vargas P.




"Emerson" escribió en el mensaje de
noticias:#$
Hola a Todos:
Bueno resulta que he leido que para manejar el tipo de datos fechas de
SQL es mejor manejarlo con dato ANSI (yyyymmdd), el cual nos evita muchos
problemas, mi pregunta es, que tipo de datos debe tener la tabla para que
esta opcion de manejar dicho tipo de dato sea la mas optima, o sea si
creo una tabla qeu tipo de datos debo asignarle al campo Fecha,
varchar(8), char(8), datetime, para que esta columna Fecha trabaje con el
dato ANSI que le voy a comparar. No se si me explique bien pero le pongo
un pequeño ejemplo:

Select Col1, Col2, Col3
From MiTabla
Where ColFecha='yyyymmdd'

Donde: Colfecha es un campo que almacena un tipo de dato fecha, que tipo
deberiade ser? varchar(8), char(8), datetime?? y por que, cual seria la
diferencia el uno del otro campo a asignarle.


*Uso SQL2000 SP4, WinXP
Y Como seria el mismo tema si Trabajaria con SQL 2005.


Saludos Coordiales y Gracias de Antemano a Todos

Emerson Q.

Respuesta Responder a este mensaje
#4 Emerson
11/07/2008 - 23:55 | Informe spam
Muchas Gracias por tu aporte Alejandro.
Entonces puedo resumir diciendo que, no importa en que lenjuage este
definida para lamacenar el dato fecha, este mi servidor de datos, si yo le
paso la fecha en formato ISO (yyyymmmdd) o ISO8601(no se cual es ese
formato) el motod de la BD lo interpreta sin nungun problema al lenguaje que
esta determinado para el dato fecha almacena, estoy en lo correcto?????

Select campo1, campo2 From Tabla Where CampoFecha = 'yyyymmdd'
*donde: CampoFecha es de tipo datetime y segun su configuracion de idioma
puede contener: 31/01/2008 ó 01/31/2008 ó 2008/01/31 ó cualquier otro tipo,
y cuando lo compare ante una fecha de tipo de dato ISO (20080131) no habra
ningun problema de interpretacion de fecha.


Emerson Q.


"Alejandro Mesa" escribió en el
mensaje news:
Emerson,

Ademas de lo escrito por Jhonny, quiero agregar que SQL Server usa 8 bytes
para almacenar el tipo de data datetime, 4 bytes para la fecha, que
indican
los dias transcurridos antes o despues de 01/01/1900 y 4 para el tiempo,
que
indican el numero de 1/300 unidades transcurridas desde la media noche.
SQL
Server no usa ningun formato en especifico para almacenar esa informacion.

Ahora, cuando queremos pasar un dato tipo datetime como constante, debemos
usar una cadena de caracteres, correcto. SQL Server va a interpretar esa
cadena de acuerdo al formato que esta tenga. Si el formato es
independiente
de el lenguaje en uso, como ISO o ISO8601, entonces no habra ningun
problema,
pero si el formato es dependiente, como U.S. o British, entonces si puede
haber problemas si el codigo se ejecuta en servidor con diferente lenguaje
al
que se espera.

Lo anterior no indica que debemos usar otro tipo de data para almacenar
fechas en SQL Server, sino que debemos usar formatos independientes de el
lenguaje, lo mas posible.


AMB


"Emerson" wrote:

Hola a Todos:
Bueno resulta que he leido que para manejar el tipo de datos fechas de
SQL
es mejor manejarlo con dato ANSI (yyyymmdd), el cual nos evita muchos
problemas, mi pregunta es, que tipo de datos debe tener la tabla para que
esta opcion de manejar dicho tipo de dato sea la mas optima, o sea si
creo
una tabla qeu tipo de datos debo asignarle al campo Fecha, varchar(8),
char(8), datetime, para que esta columna Fecha trabaje con el dato ANSI
que
le voy a comparar. No se si me explique bien pero le pongo un pequeño
ejemplo:

Select Col1, Col2, Col3
From MiTabla
Where ColFecha='yyyymmdd'

Donde: Colfecha es un campo que almacena un tipo de dato fecha, que tipo
deberiade ser? varchar(8), char(8), datetime?? y por que, cual seria la
diferencia el uno del otro campo a asignarle.


*Uso SQL2000 SP4, WinXP
Y Como seria el mismo tema si Trabajaria con SQL 2005.


Saludos Coordiales y Gracias de Antemano a Todos

Emerson Q.



Respuesta Responder a este mensaje
#5 Alejandro Mesa
12/07/2008 - 01:43 | Informe spam
Emerson,

Correcto. Puedes chequear la función "convert" en los BOL, para mas info
sobre el formato ISO8601.


AMB

"Emerson" wrote:

Muchas Gracias por tu aporte Alejandro.
Entonces puedo resumir diciendo que, no importa en que lenjuage este
definida para lamacenar el dato fecha, este mi servidor de datos, si yo le
paso la fecha en formato ISO (yyyymmmdd) o ISO8601(no se cual es ese
formato) el motod de la BD lo interpreta sin nungun problema al lenguaje que
esta determinado para el dato fecha almacena, estoy en lo correcto?????

Select campo1, campo2 From Tabla Where CampoFecha = 'yyyymmdd'
*donde: CampoFecha es de tipo datetime y segun su configuracion de idioma
puede contener: 31/01/2008 ó 01/31/2008 ó 2008/01/31 ó cualquier otro tipo,
y cuando lo compare ante una fecha de tipo de dato ISO (20080131) no habra
ningun problema de interpretacion de fecha.


Emerson Q.


"Alejandro Mesa" escribió en el
mensaje news:
> Emerson,
>
> Ademas de lo escrito por Jhonny, quiero agregar que SQL Server usa 8 bytes
> para almacenar el tipo de data datetime, 4 bytes para la fecha, que
> indican
> los dias transcurridos antes o despues de 01/01/1900 y 4 para el tiempo,
> que
> indican el numero de 1/300 unidades transcurridas desde la media noche.
> SQL
> Server no usa ningun formato en especifico para almacenar esa informacion.
>
> Ahora, cuando queremos pasar un dato tipo datetime como constante, debemos
> usar una cadena de caracteres, correcto. SQL Server va a interpretar esa
> cadena de acuerdo al formato que esta tenga. Si el formato es
> independiente
> de el lenguaje en uso, como ISO o ISO8601, entonces no habra ningun
> problema,
> pero si el formato es dependiente, como U.S. o British, entonces si puede
> haber problemas si el codigo se ejecuta en servidor con diferente lenguaje
> al
> que se espera.
>
> Lo anterior no indica que debemos usar otro tipo de data para almacenar
> fechas en SQL Server, sino que debemos usar formatos independientes de el
> lenguaje, lo mas posible.
>
>
> AMB
>
>
> "Emerson" wrote:
>
>> Hola a Todos:
>> Bueno resulta que he leido que para manejar el tipo de datos fechas de
>> SQL
>> es mejor manejarlo con dato ANSI (yyyymmdd), el cual nos evita muchos
>> problemas, mi pregunta es, que tipo de datos debe tener la tabla para que
>> esta opcion de manejar dicho tipo de dato sea la mas optima, o sea si
>> creo
>> una tabla qeu tipo de datos debo asignarle al campo Fecha, varchar(8),
>> char(8), datetime, para que esta columna Fecha trabaje con el dato ANSI
>> que
>> le voy a comparar. No se si me explique bien pero le pongo un pequeño
>> ejemplo:
>>
>> Select Col1, Col2, Col3
>> From MiTabla
>> Where ColFecha='yyyymmdd'
>>
>> Donde: Colfecha es un campo que almacena un tipo de dato fecha, que tipo
>> deberiade ser? varchar(8), char(8), datetime?? y por que, cual seria la
>> diferencia el uno del otro campo a asignarle.
>>
>>
>> *Uso SQL2000 SP4, WinXP
>> Y Como seria el mismo tema si Trabajaria con SQL 2005.
>>
>>
>> Saludos Coordiales y Gracias de Antemano a Todos
>>
>> Emerson Q.
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida