TransactSQL Convertire un Numero di secondi in un Varchar con ore e...

domenica 16 marzo 2014 - 18.13
Tag Elenco Tags  SQL Server 2008 R2

renarig Profilo | Expert

In una applicazione in una Query PassTrought devo fare questo:

Dato un numero intero maggiore o uguale a zero
che ammette valori NULL
e che rappresenta dei secondi

lo devo trasformare nella seguente stringa
- "n" se il numero è NULL diversamente:
-- numero di ore ( intero) seguito da h
-- e numero di minuti ( decimale) seguito da m

Praticamente:
Se numero = NULL --> n
Se numero = 0 ------> 0h 0m
Se numero = 30 -----> 0h 0.5m
Se numero = 54 -----> 0h 0.9m
Se numero = 60 -----> 0h 1m
Se numero = 90 -----> 0h 1.5m
Se numero = 1800 ---> 0h 30m
Se numero = 3600 ---> 1h 0m
Se numero = 3630 ---> 1h 0.5m
eccetera

Io sarei arrivato ( con le mie modeste capacita ) a questo risultato
ma spero che ci sia qualcosa di piu brillante
Io ho fatto solo una massa di Convert che se li rileggo io stesso fatico a capirli
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Grazie

alx_81 Profilo | Guru

>Io sarei arrivato ( con le mie modeste capacita ) a questo risultato
>ma spero che ci sia qualcosa di piu brillante
>Io ho fatto solo una massa di Convert che se li rileggo io stesso
>fatico a capirli
Non ci sono tante opportunità con SQL e T-SQL. E non vanno distanti da quello che hai fatto tu.
Ma sei proprio costretto a farli su SQL?
Perchè personalmente tornerei il numero di secondi al chiamante, e poi, con un linguaggio più versatile, utilizzerei i tipi di dato di System.Date per evitare tutte quelle espressioni.. i motivi sono tre:
1) T-SQL/SQL è un linguaggio un po' troppo poco versatile per gestire la problematica
2) SQL non nasce per queste esigenze
3) Se possibile, il formato (che alla fine è l'output di PRESENTAZIONE) non lo farei mai con il database, ma utilizzerei chi lo chiama

>Grazie
di nulla!

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

renarig Profilo | Expert

>1) T-SQL/SQL è un linguaggio un po' troppo poco versatile per
>gestire la problematica
>2) SQL non nasce per queste esigenze
>3) Se possibile, il formato (che alla fine è l'output di PRESENTAZIONE)
>non lo farei mai con il database, ma utilizzerei chi lo chiama

Non mi sono spiegato,
in effetti quella funzione alla fine verrà locata nella applicazione del Client ( Access )

( Non metterei mai tutto quel casino nel DB Principale di SQLServer )


In effetti sto "ristrutturando" una vecchia applicazione fatta anni fa con query di access
all'inizio andava bene, poi ho spostato il DB nella rete (internet) i record sono aumentati
e adesso mi succede che per aprire una query ci volevano 26 secondi


Da venerdi scorso ci mette meno di 1 secondo la ho semplicemente fatta diventare una PassTrought
che risiede in Access (client) ma deve essere scritta con la sintassi di SQLServer

adesso ho 3 alternative:
- La lascio cosi come è perchè va già superbene
- La miglioro ulteriormente se ci sono alternative a tutti quei CONVERT che ho usato
- Mi porto ( come mi hai consigliato ) i secondi al client, relegando i calcoli al client

Quindi la domanda verteva solamente all'esame preventivo della 2° possibilita

.

alx_81 Profilo | Guru

>Quindi la domanda verteva solamente all'esame preventivo della 2° possibilita
perfetto, io dico sempre la soluzione che a mio avviso è migliore, non pensare che voglia farti cambiare il punto di vista
Se devi seguire la seconda possibilità, io la lascerei così, potresti modulare con una funzione.. ma cambierebbe di poco.
Magari vai a capo se vuoi, per dare più leggibilità, invece che stare in line..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

renarig Profilo | Expert

>Magari vai a capo se vuoi, per dare più leggibilità, invece che stare in line..
è vero diventa molto più leggibile,
( io sono abituato ad andare a capo ad ogni nuovo campo, ma in questo caso ...)


Comunque alla fine ho portato al Client i secondi e modificando un po la
applicazione è andato tutto a posto

Grazie
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5