skcratch Posted March 14, 2008 Report Share Posted March 14, 2008 Viva! No meu projecto de BD, tenho que implementar uma aplicação que permita realizar a gestão de corridas pedestres. Um dos atributos que terá que ser inserido, é o tempo que cada atleta demora a concluir a prova. Como no SQL Server os tipos DATETIME e SMALLDATETIME apenas permitem lidar com datas completas, qual a forma alternativa que sugerem para inserir tempos no formato hh--mm--ss e que possibilite realizar operações (lógicas) sobre esse mesmo tipo? Grato desde já pela ajuda! Cumps! B) Link to comment Share on other sites More sharing options...
K Posted March 14, 2008 Report Share Posted March 14, 2008 E sao exactamente esses os tipos que tens de usar. Acontece e' que vais ter de os 'formatar' conforme aquilo que precisas. Da uma olhadela 'a funcao CONVERT que existe no MSSQL que e' qualquer coisa do tipo: CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) o que esta entre [ ] quer dizer que e' opcional. Assim de repente de cabeca deve ser algo do tipo: CONVERT(float,tempo_de_conclusao,14) - Float representa o tipo de dados para o qual o campo original vai ser convertido. - tempo_de_conclusao e' o campo original que e' do tipo DATETIME - 14 faz parte de um conjunto de codigos presente na documentacao, neste caso: 14 - hh:mi:ss:mmm(24h) http://msdn2.microsoft.com/en-us/library/aa226054(SQL.80).aspx Resumindo e concluindo: nao existe um tipo de dados para guardar apenas a hora. Tens de usar a data toda e extrair dela so aquilo que precisas. TIMESTAMP esta completamente fora de questao porque apenas guarda a hora em que o registo foi criado ou modificado. Se cais no erro de actualizar o registo (por alguma razao), perdes o tempo original. CAST tambem e' outra opcao mas para o que queres nao e' tao bom como o CONVERT. Espero que isto tenha ajudado. Abraco. SELECT * FROM users WHERE clue > 0;0 rows returned. Link to comment Share on other sites More sharing options...
skcratch Posted March 14, 2008 Author Report Share Posted March 14, 2008 Viva! Obrigado pela ajuda. Dei agora uma "olhadela" por alto e parece que pode resolver o meu problema. Cumps! B) Link to comment Share on other sites More sharing options...
K Posted March 14, 2008 Report Share Posted March 14, 2008 O tipo de dados para o que queres converter afecta depois a maneira como queres comparar os dados. Eu pessoalmente nunca trabalhei com MSSQL e comeco a dar gracas a Deus por nunca ser preciso. Mas tambem nao digo que desta agua nao beberei porque faco o que der dinheiro. O Oracle e o DB2 tem boas funcoes para lidar com o tempo, e o MySQL usa a vantagem do formato de tempo UNIX que e' facilmente convertido no que quiseres em termos de horas. Eu nao duvido que ate haja algo mais simples no MSSQL do que aquilo que pus ai, mas sinceramente, desconheco. Se calhar para calcular diferencas de tempo entre X e Y vais ter de andar outra vez 'as cabecadas com o codigo, mas ve qual e' o output que isso te da' e se consegues pelo menos extrair alguma informacao disso. Mal a mal, ve a documentacao da Microsoft e ve se podes converter apenas para segundos 😛 e trabalhas com isso... e' uma questao de imaginacao. Qualquer coisa volta aqui e vamos vendo a melhor maneira de chegar aquilo que pretendes. -EDIT- Acabei de encontrar isto: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=64762 Pode ser que ajude B) SELECT * FROM users WHERE clue > 0;0 rows returned. Link to comment Share on other sites More sharing options...
skcratch Posted March 14, 2008 Author Report Share Posted March 14, 2008 Viva! Mais uma vez, obrigado pela ajuda prestada e pelos esclarecimentos. Cumps! B) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now