elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Ayuda con indices en base de datos
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con indices en base de datos  (Leído 18,116 veces)
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #20 en: 27 Octubre 2009, 23:51 pm »

Porque cuando le pongo formato DATE, y hago un select y me devuelve tambien la HORA.. (supongamos que inserte: 21-01-1990, me devuelve 21-01-1990 00:00:00)
Y no quiero que sea así...

eso es obvio, pero en cualquier motor, ya sea SQL Server o SQL Lite podes formatear  en el select para traer solo la fecha...o lo que quieras, solo es cuestion de investigar un poco, ¿no hay?...en 10 segundos encontre...

Date And Time Functions



En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Ayuda con indices en base de datos
« Respuesta #21 en: 28 Octubre 2009, 01:28 am »

Si SQLite tiene sus cositas personalizadas .... hay que pasarle formato por lo visto a los campos DATE en SQLite. Pero si se te complica mucho el asunto chico, crea el campo tipo DATE he inserta la fecha, como te decia si por cada registro de fecha que ingreses se te guardan asi:

1999-11-23   10:03:00

Utiliza para obtener los datos en una busquedad la funcion SUBSTR (Que asumo debe existir en SQLite) te mostrare un ejemplo en MySQL :

Código
  1.  
  2. mysql> SELECT * FROM ejemplo;
  3. +---------------------+
  4. | fecha               |
  5. +---------------------+
  6. | 2009-11-22 00:00:00 |
  7. | 2006-10-30 00:00:00 |
  8. | 2001-08-23 00:00:00 |
  9. | 1998-10-29 00:00:00 |
  10. +---------------------+
  11. 4 ROWS IN SET (0.00 sec)
  12.  
  13. mysql> SELECT substr(fecha, 1, 10) FROM ejemplo WHERE fecha  LIKE '2001-08-23%';
  14. +----------------------+
  15. | substr(fecha, 1, 10) |
  16. +----------------------+
  17. | 2001-08-23           |
  18. +----------------------+
  19. 1 ROW IN SET (0.00 sec)
  20.  
  21. mysql> SELECT substr(fecha, 1, 10) FROM ejemplo WHERE fecha  LIKE '1998-%-29%';
  22. +----------------------+
  23. | substr(fecha, 1, 10) |
  24. +----------------------+
  25. | 1998-10-29           |
  26. +----------------------+
  27. 1 ROW IN SET, 1 warning (0.00 sec)
  28.  
  29.  

No hay tunning ni optimizacion alguna en la consulta, es mas para que te sirva de referencia de como podrias buscar los datos en la tabla sin necesidad de que te devuelve el rango de fecha con la hora incluida. la funcion SUBSTR funciona   SUBSTR(campo, desde, hasta)
Siendo desde la ubicacion del registro donde se comenzara a contar y hasta, hasta donde se contara en el caso de una fecha:

1999-11-23   10:02:00

Desde el digito 1 hasta el 10 es '1999-11-23'

Besos  :-*


« Última modificación: 28 Octubre 2009, 01:34 am por ^TiFa^ » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #22 en: 28 Octubre 2009, 05:00 am »

Porque cuando le pongo formato DATE, y hago un select y me devuelve tambien la HORA.. (supongamos que inserte: 21-01-1990, me devuelve 21-01-1990 00:00:00)
Y no quiero que sea así...

eso es obvio, pero en cualquier motor, ya sea SQL Server o SQL Lite podes formatear  en el select para traer solo la fecha...o lo que quieras, solo es cuestion de investigar un poco, ¿no hay?...en 10 segundos encontre...

Date And Time Functions



Lee bien lo que puesto.. dije que no hay EN CASTELLANO.. no soy muy bueno con el ingles...


Y ahorita pruebo loq ue em dices Tifa..
Gracias!!!
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #23 en: 28 Octubre 2009, 05:17 am »

Perdon por armar tanto disturbio al pedo...
Tal vez lo habia hecho mal anteriormente.. tal vez ponia datatime....

Hice lo siguiente:
Cree la base con un Fecha DATE

y luego:
Código
  1. Public Class Form1
  2.  
  3.    Private database As String = "C:\databaseprueba.db3"
  4.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  5.        Dim SQLconnect As New SQLite.SQLiteConnection()
  6.        Dim SQLcommand As SQLite.SQLiteCommand
  7.        SQLconnect.ConnectionString = "Data Source=" & database & ";"
  8.        SQLconnect.Open()
  9.        SQLcommand = SQLconnect.CreateCommand
  10.        'Insert Record into Foo
  11.        SQLcommand.CommandText = "INSERT INTO Prueba (Fecha) VALUES ('1991-02-22')"
  12.        SQLcommand.ExecuteNonQuery()
  13.        SQLcommand.Dispose()
  14.        SQLconnect.Close()
  15.    End Sub
  16.  
  17.    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  18.        Dim SQLconnect2 As New SQLite.SQLiteConnection()
  19.        Dim SQLcommand2 As SQLite.SQLiteCommand
  20.        SQLconnect2.ConnectionString = "Data Source=" & database & ";"
  21.        SQLconnect2.Open()
  22.        SQLcommand2 = SQLconnect2.CreateCommand
  23.        SQLcommand2.CommandText = "SELECT * FROM Prueba"
  24.        Dim SQLreader2 As SQLite.SQLiteDataReader = SQLcommand2.ExecuteReader()
  25.        While SQLreader2.Read()
  26.            MsgBox(SQLreader2(0))
  27.        End While
  28.        SQLcommand2.Dispose()
  29.        SQLconnect2.Close()
  30.    End Sub
  31. End Class


Y perfectamente me mostró la fecha así:
22/02/1991


Muchisimas gracias!!!!!


Entonces ahora volviendo al tema... me recomiendas hacer un INDICE en el nuevo campo FECHA, y realizar una busqueda concatenando el dia con el mes...
Tendré que ponerle a todas las fechas el año 0000.. porque son efemerides.. se supone que no importa en que año fueron.. (aunque se detalla en el texto)..

Gracias a todos che.. como siempre, un AGRADO MUY GRANDE el aprendender con ustedes!


PD.: Agrego algo:
para hacer una busqueda, hay que escribirla de esta manera: "SELECT * FROM Prueba WHERE Fecha='1990-01-21'", y no como muestra el resultado (21/01/1990)


Y pregunto algo mas..
Supongamos que hago un INDICE así.
CREATE INDEX indice ON Prueba(Fecha)
Luego al hacer un SELECT, no tengo que poner el nombre del indice no?? tengo que seguir usando el "Prueba" como "nombre de columna"... o me equivoco?
« Última modificación: 28 Octubre 2009, 05:33 am por Skeletron » En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Ayuda con indices en base de datos
« Respuesta #24 en: 28 Octubre 2009, 05:40 am »

Disculpa que no te ayude mucho a estas horas.... es tarde, tengo un suenio enorme  :xD  y debo levantarme a las 5:30 am para el trabajo y ahora son las 12:34 am  :xD

Citar
Supongamos que hago un INDICE así.
CREATE INDEX indice ON Prueba(Fecha)
Luego al hacer un SELECT, no tengo que poner el nombre del indice no?? tengo que seguir usando el "Prueba" como "nombre de columna"... o me equivoco?

No, no tienes que colocar el nombre del indice, dicho nombre es solo para guardarlo en el diccionario de la DB donde se reflejan todos los indices, de todas las tablas y bajo que usuario (En caso que quieras hacer una busquedad bajo nombre del indice para averiguar a que tabla, usuario, instancia pertenece  ;)  lo cual no es tu caso).

Citar
me recomiendas hacer un INDICE en el nuevo campo FECHA, y realizar una busqueda concatenando el dia con el mes...

No debes concatenar ahora, recuerda que la fecha viene ahora en 1 solo formato y pegado  :xD te convendria mas usar SUBSTR por ejemplo.
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #25 en: 28 Octubre 2009, 06:15 am »

No no.. me referia a que tendre que concatenar porque:
Tengo 12 carpetas, y dentro de cada carpeta tengo 31 archivos de texto con cada linea una entrada para la base de datos.. entonces hago lo sigueinte:

(aunque se me presento otro problema.. leer debajo de todo)

Código
  1.    Private Sub INSERTAR(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim conexión As New SQLite.SQLiteConnection()
  3.        Dim Consulta As SQLite.SQLiteCommand
  4.        Dim linea As String = ""
  5.        conexión.ConnectionString = "Data Source=" & Database & ";"
  6.        conexión.Open()
  7.        Consulta = conexión.CreateCommand
  8.        For Mess As Integer = 1 To 2 '12
  9.            For Diaa As Integer = 1 To 2 '31
  10.                Dim Lectura As StreamReader = New StreamReader("C:\Users\Noel\Desktop\BrodaSoft\Visual Basic Proyectos\BACKUP's\VIDay\Version 7 Oficial\DataBase\" & Mess & "\" & Diaa & ".txt", System.Text.Encoding.Default, False)
  11.                While True
  12.                    linea = Lectura.ReadLine
  13.                    If linea = "" Then
  14.                        Exit While
  15.                    End If
  16.                    linea = linea.Replace("'", "-")
  17.                    linea = linea.Replace("\", "")
  18.                    linea = linea.Replace("""", "-")
  19.                    Consulta.CommandText = "INSERT INTO Efemerides (Fecha, Texto, Version) VALUES ('0000-" & Mess & "-" & Diaa & "', '" & linea & "', '1')"
  20.                    Consulta.ExecuteNonQuery()
  21.                End While
  22.                Lectura.Dispose()
  23.                Lectura.Close()
  24.            Next
  25.            MsgBox("Fin de mes")
  26.        Next
  27.        Consulta.Dispose()
  28.        conexión.Close()
  29.        MsgBox("Listo")
  30.    End Sub


Como veran, leo éste archivo:
C:\Users\Noel\Desktop\BrodaSoft\Visual Basic Proyectos\BACKUP's\VIDay\Version 7 Oficial\DataBase\0" & Mess & "\" & Diaa & ".txt"
Que segun los valores de los FOR, entraré al 1º dia del 1º mes:
C:\Users\Noel\Desktop\BrodaSoft\Visual Basic Proyectos\BACKUP's\VIDay\Version 7 Oficial\DataBase\1\1.txt"
E insertará la 1º linea de ese archivo.. y colocará en la fecha de ingreso: 0000-1-1
:)
Como hago para que ese 0000-1-1 pase a ser 0000-01-01 ??? porque aunque no lo crean, da error en el formato data al hacer el Select :O



Las carperas van del 01 al 012 (era así porque en su momento RIPWAY no me permitia nombre tan corto en carpeta :P)
Y los archivos, del 1 al 31

Cambiarle el nombre a las carpetas, es facil... le pongo del 01 al 12 si quiero.. pero que hago con los archivos???
Capaz tenga que jugar un poco con acumuladores.. y problema solucionado.. ya vere que ahgo..
« Última modificación: 28 Octubre 2009, 06:20 am por Skeletron » En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Ayuda con indices en base de datos
« Respuesta #26 en: 29 Octubre 2009, 04:26 am »

Valgame que pena que no se Visual Basic  :-(

Porque tu problemita lo analize, y lo resolvi pero en PERL  :-[

Código
  1.  
  2. for ( my $mes = 1; $mes <= 12; $mes++ ) {
  3.  for ( my $dia = 1; $dia <= 31; $dia++ ) {
  4.  
  5.        if ( $mes <= 9 && $dia <= 9 ) {
  6.  
  7.              print STDOUT "0000-" . '0' . $mes . "-" .   '0'   .   $dia . "\n";
  8.              next;
  9.        }
  10.            print STDOUT "0000-" . $mes . "-" . $dia . "\n";
  11. }
  12. };
  13.  
  14.  

Lo cual al ejecutar me imprime:

Citar
       
0000-09-01               
0000-09-02               
0000-09-03               
0000-09-04               
0000-09-05               
0000-09-06               
0000-09-07               
0000-09-08               
0000-09-09

Obviamente la condicion se cumple en mes y dia con un cero de primera, siempre y cuando tanto mes como dia sean igual o menor que 9  ;)  puedes hacerlo esto solo es una idea de que podrias hacer para tu problemita. Los puntitos que vez en los PRINT son 'concatenar'  si te sirve puedes analizarlo, echarle mas logica y hacer eso bucles for con condiciones si se cumple tal cosa concatename cero en dia y mes, sino se cumple quitamele el cero.

« Última modificación: 29 Octubre 2009, 04:36 am por ^TiFa^ » En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #27 en: 29 Octubre 2009, 04:37 am »

No no.. me referia a que tendre que concatenar porque:
Tengo 12 carpetas, y dentro de cada carpeta tengo 31 archivos de texto con cada linea una entrada para la base de datos.. entonces hago lo sigueinte:

(aunque se me presento otro problema.. leer debajo de todo)

Código
  1.    Private Sub INSERTAR(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim conexión As New SQLite.SQLiteConnection()
  3.        Dim Consulta As SQLite.SQLiteCommand
  4.        Dim linea As String = ""
  5.        conexión.ConnectionString = "Data Source=" & Database & ";"
  6.        conexión.Open()
  7.        Consulta = conexión.CreateCommand
  8.        For Mess As Integer = 1 To 2 '12
  9.            For Diaa As Integer = 1 To 2 '31
  10.                Dim Lectura As StreamReader = New StreamReader("C:\Users\Noel\Desktop\BrodaSoft\Visual Basic Proyectos\BACKUP's\VIDay\Version 7 Oficial\DataBase\" & Mess & "\" & Diaa & ".txt", System.Text.Encoding.Default, False)
  11.                While True
  12.                    linea = Lectura.ReadLine
  13.                    If linea = "" Then
  14.                        Exit While
  15.                    End If
  16.                    linea = linea.Replace("'", "-")
  17.                    linea = linea.Replace("\", "")
  18.                    linea = linea.Replace("""", "-")
  19.                    Consulta.CommandText = "INSERT INTO Efemerides (Fecha, Texto, Version) VALUES ('0000-" & Mess & "-" & Diaa & "', '" & linea & "', '1')"
  20.                    Consulta.ExecuteNonQuery()
  21.                End While
  22.                Lectura.Dispose()
  23.                Lectura.Close()
  24.            Next
  25.            MsgBox("Fin de mes")
  26.        Next
  27.        Consulta.Dispose()
  28.        conexión.Close()
  29.        MsgBox("Listo")
  30.    End Sub


Como veran, leo éste archivo:
C:\Users\Noel\Desktop\BrodaSoft\Visual Basic Proyectos\BACKUP's\VIDay\Version 7 Oficial\DataBase\0" & Mess & "\" & Diaa & ".txt"
Que segun los valores de los FOR, entraré al 1º dia del 1º mes:
C:\Users\Noel\Desktop\BrodaSoft\Visual Basic Proyectos\BACKUP's\VIDay\Version 7 Oficial\DataBase\1\1.txt"
E insertará la 1º linea de ese archivo.. y colocará en la fecha de ingreso: 0000-1-1
:)
Como hago para que ese 0000-1-1 pase a ser 0000-01-01 ??? porque aunque no lo crean, da error en el formato data al hacer el Select :O



Las carperas van del 01 al 012 (era así porque en su momento RIPWAY no me permitia nombre tan corto en carpeta :P)
Y los archivos, del 1 al 31

Cambiarle el nombre a las carpetas, es facil... le pongo del 01 al 12 si quiero.. pero que hago con los archivos???
Capaz tenga que jugar un poco con acumuladores.. y problema solucionado.. ya vere que ahgo..

con un simple Format() se soluciona...
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #28 en: 10 Noviembre 2009, 02:15 am »

Utilizando el PARSE:
Date.Parse("0000-1-2"), NO funciona, pero con: Date.Parse("1111-1-2") ya funciona... es como que en el Parseado, no puede parsear un año=0000
Dato importante para la comunidad :P

Muy atareado con la facultad.. mucho estudio.. recien hoy me pongo con ésto..
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Ayuda con indices en base de datos
« Respuesta #29 en: 10 Noviembre 2009, 02:17 am »

Valgame que pena que no se Visual Basic  :-(

Porque tu problemita lo analize, y lo resolvi pero en PERL  :-[

Código
  1.  
  2. for ( my $mes = 1; $mes <= 12; $mes++ ) {
  3.  for ( my $dia = 1; $dia <= 31; $dia++ ) {
  4.  
  5.        if ( $mes <= 9 && $dia <= 9 ) {
  6.  
  7.              print STDOUT "0000-" . '0' . $mes . "-" .   '0'   .   $dia . "\n";
  8.              next;
  9.        }
  10.            print STDOUT "0000-" . $mes . "-" . $dia . "\n";
  11. }
  12. };
  13.  
  14.  

Lo cual al ejecutar me imprime:

Citar
       
0000-09-01               
0000-09-02               
0000-09-03               
0000-09-04               
0000-09-05               
0000-09-06               
0000-09-07               
0000-09-08               
0000-09-09

Obviamente la condicion se cumple en mes y dia con un cero de primera, siempre y cuando tanto mes como dia sean igual o menor que 9  ;)  puedes hacerlo esto solo es una idea de que podrias hacer para tu problemita. Los puntitos que vez en los PRINT son 'concatenar'  si te sirve puedes analizarlo, echarle mas logica y hacer eso bucles for con condiciones si se cumple tal cosa concatename cero en dia y mes, sino se cumple quitamele el cero.


El problema de ésto, es que con el mes: 10, 11, y 12, pasará el valor: 011, 012... y no lo tomará como un DATE :/
En línea

Páginas: 1 2 [3] 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
INDICES SOBRE TABLAS
Bases de Datos
RULZY 2 2,576 Último mensaje 16 Junio 2011, 04:59 am
por RULZY
Problema con índices
Programación C/C++
shulneos 9 4,383 Último mensaje 19 Agosto 2013, 11:57 am
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines