[MSSQL] Query aiuto

martedì 09 gennaio 2007 - 15.59

dannythegreat Profilo | Newbie

Ciao a tutti, vi chiedo disperatamente aiuto... in pratica ho creato la seguente tabella tourdates...

CREATE TABLE tourdates
(
Data datetime primary key,
Luogo char (50),
Formazione char (100),
Genere char (100),
Nota char (250));

poi ho utilizzato quest'altra query per visualizzare tutti gli eventi compresi dalla data corrente fino all'1 gennaio 2050 in modo tale che mi facesse vedere tutti gli eventi scartando solo quelli già passati!

SELECT *
FROM Tourdates
WHERE (((tourdates.data) Between getDate() And 205011))
ORDER BY Data ASC;

La query funziona correttamente , il mio problema sta nel fatto che mssql mette data e ora con il comando "datetime" , come posso fare a non far visualizzare l'ora? In mysql bastava inserire solamente "data" o "time" , qui la cosa è molto complicata per me che non sono un esperto.Vi prego aiutatemi sto uscendo pazzo ! Grazie!

us01739 Profilo | Expert

Prova a dare un'occhiata qui:
http://www.databasejournal.com/features/mssql/article.php/10894_2197931_2

Bye Bye

---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

lbenaglia Profilo | Guru

>Ciao a tutti, vi chiedo disperatamente aiuto... in pratica ho
>creato la seguente tabella tourdates...
>
>CREATE TABLE tourdates
>(
> Data datetime primary key,
> Luogo char (50),
> Formazione char (100),
> Genere char (100),
> Nota char (250));
>
>poi ho utilizzato quest'altra query per visualizzare tutti gli
>eventi compresi dalla data corrente fino all'1 gennaio 2050 in
>modo tale che mi facesse vedere tutti gli eventi scartando solo
>quelli già passati!
>
>SELECT *
>FROM Tourdates
>WHERE (((tourdates.data) Between getDate() And 205011))
>ORDER BY Data ASC;

Ciao dannythegreat,

dubito che questa query possa funzionare
Una curiosità: per quale motivo vuoi prendere le righe con la colonna data compresa tra oggi ed il 2050?
Non puoi semplicemente prendere tutte le righe superiori o uguali ad oggi?

SELECT * FROM dbo.Tourdates WHERE Data >= CONVERT(char(8), GETDATE(), 112) ORDER BY Data

Come puoi notare ho utilizzato la funzione CONVERT per castare la data in una stringa nel formato ISO 'YYYYMMDD'. In questo modo andrò a considerare tutte le righe la cui data è superiore alle 0:00 di oggi.
In fase di risoluzione della query, avverrà un cast implicito da stringa a datetime.

>La query funziona correttamente , il mio problema sta nel fatto
>che mssql mette data e ora con il comando "datetime" , come posso
>fare a non far visualizzare l'ora?
Utilizza nuovamente la funzione CONVERT per formattare la colonna datetime come preferisci.
Ad esempio se vuoi visualizzare la data nel formato DD/MM/YYYY è sufficiente specificare lo stile 103:

SELECT CONVERT(char(10), GETDATE(), 103) AS DataFormattata FROM dbo.Tourdates WHERE Data >= CONVERT(char(8), GETDATE(), 112) ORDER BY Data

>In mysql bastava inserire
>solamente "data" o "time" , qui la cosa è molto complicata per
>me che non sono un esperto.
Sfortunatamente SQL Server non offre due data type distinti per memorizzare la data e l'ora, ma ricorrendo alla funzione CONVERT puoi sopperire a questa mancanza.
Molto probabilmente Katmai ci porterà qualche novità in tal senso

>Grazie!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dannythegreat Profilo | Newbie

Ti ringrazio di cuore... funziona più che bene... ho tolto solo

FROM "dbo."nomemiodatabase (IL TESTO TRA LE VIRGOLETTE)

ed è andato alla perfezione! Cmq dovrei studiarmi per bene sql... sai qualche guida scaricabile fatta bene per sql? Avrei un'ultimissma domanda... credo però sarà un po più complicata della query.. come posso fare a creare una pagina asp, se è possibile in php o altro.. con un form che quando lo compilo mi vada a riempire i campi della mia tabella? Grazie gentilissimo! :)

ALT ALT ALT !!!!!!!! Avevo provato solo con due record... ho notato che mi fa vedere correttamente tutte le date >= a oggi .... ma la colonna data viene formattata tutta con la stessa data (es: rec1: 01/01/2007 rec2: 01/01/2007 etc etc) come risolvo il problema? Ti prego aiutami il prima possibile!Ciaoo!

lbenaglia Profilo | Guru

>Ti ringrazio di cuore... funziona più che bene... ho tolto solo
>
>FROM "dbo."nomemiodatabase (IL TESTO TRA LE VIRGOLETTE)
>
>ed è andato alla perfezione!

Perché hai eliminato lo schema? L'ho messo di proposito
Qual è lo schema a cui appartiene la tabella Tourdates?
Ti ricordo che è sempre consigliabile utilizzare il "two-part name" (ovvero schema.oggetto) in modo da identificare univocamente un oggetto evitando fraintendimenti nel caso esistano due oggetti omonimi in schema differenti.


>Cmq dovrei studiarmi per bene sql...
>sai qualche guida scaricabile fatta bene per sql?
I Books Online, la documentazione ufficiale di SQL Server.
L'ultima versione per SQL Server 2005 è scaricabile dal seguente url:
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx

>come posso fare a creare una pagina asp, se è possibile in php
>o altro.. con un form che quando lo compilo mi vada a riempire
>i campi della mia tabella?
Qua sei off topic.
Se hai intenzione di sviluppare una web application in ASP.NET ti suggerisco di postare questa richiesta sul forum corretto:

"ASP.NET 1.0/1.1"
http://www.dotnethell.it/forum/ASP.NET-1.1.aspx

"ASP.NET 2.0"
http://www.dotnethell.it/forum/ASP.NET-2.0.aspx

Se invece desideri ricevere informazioni su PHP rivogiti sui forum/newsgroups che trattano questa tecnologia.

>ALT ALT ALT !!!!!!!! Avevo provato solo con due record... ho
>notato che mi fa vedere correttamente tutte le date >= a oggi
>.... ma la colonna data viene formattata tutta con la stessa
>data (es: rec1: 01/01/2007 rec2: 01/01/2007 etc etc) come risolvo
>il problema? Ti prego aiutami il prima possibile!Ciaoo!
E quale sarebbe il problema, scusa?
Inserisci due date uguali (ma con orari diversi altrimenti avresti una violazione della Primary Key) e vedi due righe con la stessa data.
OK, e quindi?
Quale risultato vorresti ottenere?
Una data univoca? Se la risposta è affermativa occorre discriminare quale riga restituire.
Come? Beh, dipende da quello che vuoi ottenere (in fondo si tratta sempre di 2 righe di cui una la vuoi eliminare ma le regole che determinano la riga prescelta le conosci solo tu).

Posta alcuni comandi di INSERT per popolare la tabella che hai allegato al primo post e spiega chiaramente quale risultato vorresti ottenere dalla query.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dannythegreat Profilo | Newbie

Nessun problema risolto ... bastava che sostituivo

SELECT CONVERT(char(10), GETDATE(), 103)

con ( data )

SELECT CONVERT(char(10), Data, 103)

in quel modo stampava in ogni record la data di oggi nascondendo la data che avevo inserito!

Grazie di tutto ora posterò qualcosa nella sezione asp.net per creare un form di inserimento nel database! Ciao!

dannythegreat Profilo | Newbie

Oh un piccolissimo problema... in pratica ora è tutto ok, ma mette le date per ordine di giorno.. non è in ordine in base al giorno e mese! Esempio... mi mette le date 1/10/2007, 1/11/2007 e non conta esempio 5/10/2007 o 8/11/2007 ... come posso ordinare le date correttamente? Grazie!

lbenaglia Profilo | Guru

>Oh un piccolissimo problema... in pratica ora è tutto ok, ma
>mette le date per ordine di giorno.. non è in ordine in base
>al giorno e mese! Esempio... mi mette le date 1/10/2007, 1/11/2007
>e non conta esempio 5/10/2007 o 8/11/2007 ... come posso ordinare
>le date correttamente?

Se hai specificato nella clausola ORDER BY l'alias di colonna utilizzato per identificare un cast della data a stringa, il risultato che ottieni è normale: la stringa '1/10/2007' è minore rispetto alla stringa '5/10/2007' anche se dal punto di vista cronologico sarebbe esattamente il contrario
Per risolvere il problema devi specificare nella clausola ORDER BY la colonna datetime.

>Grazie!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dannythegreat Profilo | Newbie

La colonna specificata era

ORDER BY DATA (la colonna datetime)

ma avevo l'errore che ti ho specificato nella risposta precedente! Ho provato ora in un'altro modo

ORDER BY datetime

ma logicamente non va

Cmq vorrei avere le date ordinate correttamente, invece mi mette tutte le date che iniziano (1/12/2006, 1/06/2007/, 1/04/2007)
basta che ci sia come giorno, esempio 1, allora tutte le date che iniziano con 1 per lui sono messe in ordine !Fammi sapere grazie ciao!

lbenaglia Profilo | Guru

>ORDER BY DATA (la colonna datetime)
>
>ma avevo l'errore che ti ho specificato nella risposta precedente!

Ascolta, gli esempi che ti ho postato ordinano i dati in modo corretto.
Se nel frattempo le ipotesi sono cambiate ti invito a postare un esempio completo di tutti i comandi DDL e DML che riproduca il problema.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5