Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemZamknutoVyřešeno SQL server, převod datového typu v SELECT

Dobrý den,
prosím o radu jak převést číslo v desítkové soustavě do šedesátkové.

Příklad

2,06666666666669 = 2:04 hod
-0,116666666666666 = -0:07 hod
2,56666666666667 = 2:34 hod

zkoušel jsem použít funkce CAST a CONVERT, ale nikdy se mi z toho nepodařilo dostat kýžený výsledek.

Poradíte prosím?

Předmět Autor Datum
O jaký SQL server se jedná? A nebyl by možný (= vhodnější) převod na potřebný formát před uložením d…
host 12.12.2007 17:17
host
Najlepšie bude, keď formátovanie toho čísla spravíš v aplikácií, ktorá ho prezentuje používateľovi.…
los 12.12.2007 19:36
los
Omlouvám se za opomenutí. Jedná se o SQL Server 2005 Express. Data jsou tak uložené. Je to hotová…
yorg 13.12.2007 09:00
yorg
Na prevod takého čísla na typ datetime stačí jednoduchá matematika, napr. pre čas 0,483333333333336:…
los 13.12.2007 12:13
los
Díky moc, zítra to hned ověřím. To dělení 24 mě nenapadlo. Mělo by stačit i prosté dělení bez převod…
yorg 17.12.2007 20:30
yorg
Pokud by to někdy někomu mohlo pomoci, tak tady je řešení: sign(Hodiny)* (ABS(Hodiny)-(ABS(Hodiny)-… poslední
yorg 20.12.2007 10:08
yorg

Najlepšie bude, keď formátovanie toho čísla spravíš v aplikácií, ktorá ho prezentuje používateľovi. Robiť to priamo v SQL príkaze je zbytočne zložité.

Ak by si to predsa len chcel robiť priamo na úrovni SQL, tak všetky menej zložité riešenia závisia od konkrétneho typu databázového stroja, ktorý si zabudol spomenúť.

Omlouvám se za opomenutí.

Jedná se o SQL Server 2005 Express.

Data jsou tak uložené. Je to hotová aplikace kterou jsme koupili. Já z toho potřebuji "jen" vyexportovat jeden výstup a právě požadovaný údaj o době je uložen v desetinném tvaru ve float.

Měly by to zvládnout funkce CAST and CONVERT, ale v tom popisu je to tak moc precizně popsané, že tomu už nerozumím. Konkrétně mě zajímá from float to datetime.

Problém je v tom, že pro CAST(Hodiny AS datetime) např. z 0,483333333333336 dostanu 4.1.1900 15:36:00, žádoucí je 0:29 hod. Přitom Hodiny jsou ve float. A pro CONVERT, kterou bych si vytáhl hh:mm už tak není správný výstup.

Když to vyexportuji do Excelu, tak ani tam jsem funkci, která by to převedla nenašel.

Na prevod takého čísla na typ datetime stačí jednoduchá matematika, napr. pre čas 0,483333333333336:

select cast(0.483333333333336 / 24 as datetime)
----------
1900-01-01 00:29:00.000

Problémom je, že výsledok je datetime, takže štandardné funkcie pre formátovanie dátumu stačia len pre hodnoty z intervalu <0, 24).

Môžeš vyskúšať niečo takéto (za @x dáš názov stĺpca) a ak ti to bude vyhovovať, tak si to definuj ako funkciu, nech sa tie selecty dajú potom čítať:

select case sign(@x) when -1 then '-' else '' end + cast(abs(cast(@x as int)) as varchar) + ':' + right('0' + cast(round(60 * abs(@x - cast(@x as int)), 0) as varchar), 2)

Zpět do poradny Nahoru