Memorizzazione di orari in SQL Server 7.0.0

giovedì 26 aprile 2007 - 14.16

Paolo1972 Profilo | Newbie

Salve a tutti,
sto realizzando un programma in VB 6 che utilizza come base dati SQL Sever 7.0.0. Questo programma prevede la memorizzazione di date e di orari. Fin quando si tratta di memorizzare le date utilizzo la seguente istruzione in SQL:

INSERT INTO MiaTabella (COGNOME, NOME, DATADINASCITA) VALUES _
&"("& "'" & sCognome & "'" & "," & "'" & sNome & "'" & "." & "'" & sDataDiNascita & "'" & ")"

dove sCognome e sNome sono varibili di tipo stringa e sDataDiNascita è una variabile di tipo stringa contenente la data nel formato yyyy-mm-dd (ad es. 2007-01-01). Ovviamente il campo DATADINASCITA è di tipi datetime. Inoltre nel campo DATADINASCITA olte alla data trovo anche l'orario.

Quando poi devo visualizzare le informazioni memorizzate in una MSHFlexGrid utilizzo la seguente istruzione in SQL:

SELECT MiaTabella.COGNOME, MiaTabella.NOME, CONVERT (VARCHAR(10), MiaTabella.DATADINASCITA, 103) AS SoloData FROM MiaTabella.

Fin qui tutto ok...entrambi le istruzioni funzionano. Ora il problema nasce quando devo visualizzzare gli orari.
Per memorizzare un orario posso utilizzare la seguente istruzione in SQL:

INSERT INTO MiaTabella (COGNOME, NOME, ORAENTRATA) VALUES _
&"("& "'" & sCognome & "'" & "," & "'" & sNome & "'" & "." & "'" & sOraEntrata & "'" & ")"


dove sOraEntrata ha l'ora memorizzata nel formato hh:mm (ad es. 13:00). Anche in questo caso il campo ORAENTRATA è di tipo datetime.

Come faccio però a visualizzare solo la parte dell'ora visto che anche in questo caso nel campo ORAENTRATA mi compare prima la data e poi l'ora?

Ho sbagliato a scrivere la INSERT per l'orario?

Grazie a tutti per la rispsota.
Paolo

dedalo.nel.labirinto Profilo | Newbie

SELECT MiaTabella.COGNOME, MiaTabella.NOME,
right('0' + cast(datepart(hour, MiaTabella.ORAENTRATA) as varchar(2)), 2) + ':'
+ right('0' + cast(datepart(minute, MiaTabella.ORAENTRATA) as varchar(2)), 2) AS Ora
FROM MiaTabella


oppure:

SELECT MiaTabella.COGNOME, MiaTabella.NOME, substring(convert(varchar(20), MiaTabella.ORAENTRATA, 20), 12, 5) AS Ora FROM MiaTabella

Paolo1972 Profilo | Newbie

Grazie per la risposta.
Nel frattempo che aspettavo la risposta ho fatto alcune modifiche alla mia SELECT iniziale ed ho trovato la seguente istruzione:

SELECT MiaTabella.Cognome, MiaTabella.Nome, CONVERT (VARCHAR(5), MiaTabella.DATADINASCITA, 108) AS SoloOra

quindi differisce dalla precendente istruzione ssql (SELECT MiaTabella.COGNOME, MiaTabella.NOME, CONVERT (VARCHAR(10), MiaTabella.DATADINASCITA, 103) AS SoloData FROM MiaTabella) solo dalla lunghezza della stringa (5 invece di 10) e dal numero (108 invece di 103). Ho fatto varie prove e tutte mi danno esito positivo.

Semplice curiosità: l'istruzione da me utilizzata ha qualche "effetto collaterale" oppure è una valida alternativa?

Grazie per la risposta


Paolo

dedalo.nel.labirinto Profilo | Newbie


si penso sia una valida alternativa, senza problemi.

i valori numerici passati al metodo convert() sono degli stili utilizzati per formattare in testo una datetime. se non ne viene specificato alcuno SQLServer utilizzerà i suoi settaggi, in base al linguaggio, alle sue impostazioni... ogni istanza ha dei settaggi propri.

utilizzando:

CONVERT (VARCHAR(5), MiaTabella.DATADINASCITA, 108)

stai specificando che il valore datetime deve essere nel formato hh:mm:ss e della stringa risultante vuoi solo i primi 5 caratteri.


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