Minuty na liczbę dziesiętną

0

Cześć,
pewnie to banał, ale nie mogę sobie poradzić z zamianą liczby minut na liczbę dziesiętną.
Wynik zwracany jako liczba całkowita
Bardzo dziękuję za pomoc :)

DATEDIFF(MINUTE,
  (dateadd(day, 0, datediff(day, 0, isnull(zzw.Data_rz, cast('19000101' as datetime)))) + 
  dateadd(day, 0 - datediff(day, 0, isnull(zzw.Godz, 0)), isnull(zzw.Godz_rz, 0))),
  (dateadd(day, 0, datediff(day, 0, isnull(zzw.Data, cast('19000101' as datetime)))) + 
  dateadd(day, 0 - datediff(day, 0, isnull(zzw.Godz, 0)), isnull(zzw.Godz, 0)))
  ) / 60

 convert(varchar(100), DATEDIFF(minute, (CONVERT(VARCHAR,ZZW.DATA_RZ + CONVERT(DATETIME, CONVERT(VARCHAR(8), ISNULL(ZZW.GODZ_RZ, CAST('00:00' AS DATETIME)), 8), 8),120)),
(CONVERT(VARCHAR,ZZW.DATA + CONVERT(DATETIME, CONVERT(VARCHAR(8), ISNULL(ZZW.GODZ, CAST('00:00' AS DATETIME)), 8), 8),120)))) / 60
0

Możesz podać jakiś przykład bez kodu? Teraz, rozumiem, że masz np. 10,23 minut i to chcesz zamieniać na liczbę dziesiętną, np. na 10,23 ? ;-)

0
yarel napisał(a):

Możesz podać jakiś przykład bez kodu? Teraz, rozumiem, że masz np. 10,23 minut i to chcesz zamieniać na liczbę dziesiętną, np. na 10,23 ? ;-)

OK, więc wynik jest np. 384 i po podzieleniu przez 60 (jak w kodzie) jest wyświetlana i tak liczba całkowita czyli 6 zamiast (jak chcę) 6,4 (384/60=6,4)
screenshot-20220629130658.png

0
yarel napisał(a):

Możesz podać jakiś przykład bez kodu? Teraz, rozumiem, że masz np. 10,23 minut i to chcesz zamieniać na liczbę dziesiętną, np. na 10,23 ? ;-)

właśnie wynik zawsze jest liczbą całkowitą... minut... 384 196 198 itp

1

@Solar67: Inaczej zapytam. Jeśli na wejściu masz: 1 minuta, 10 minut, 100 minut, 1000 minut, 10000 minut, to co chcesz mieć na wyjściu?
Co jeśli na wejściu masz 10.12345677777 minut? Co ma by na wyjściu?

Z kodu SQL, mam wrażenie, że chcesz jakoś formatować różnicę między dwiema datami, ale pytasz o zamianę minut na format dziesiętny.

3
SELECT 384 / 60 -- to nie działa
  ,384 / 60.0 -- to jest najprostsze, ale silnik może potraktować to jak FLOAT (pewności nie mam) i może przynieść niepożądane rezultaty
  ,CONVERT(NUMERIC(18,8),CONVERT(NUMERIC(18,8),384)/CONVERT(NUMERIC(18,8),60)) -- opcja dla przesadnie ostrożnych, precyzję musisz sobie dobrać sam :)
0
SELECT CONVERT(NUMERIC(18,2), (384.00/60.00)) 

-- Result: 6.40

Chcesz po prostu godziny w formie dziesiętnym.

0
yarel napisał(a):

@Solar67: Inaczej zapytam. Jeśli na wejściu masz: 1 minuta, 10 minut, 100 minut, 1000 minut, 10000 minut, to co chcesz mieć na wyjściu?
Co jeśli na wejściu masz 10.12345677777 minut? Co ma by na wyjściu?

Z kodu SQL, mam wrażenie, że chcesz jakoś formatować różnicę między dwiema datami, ale pytasz o zamianę minut na format dziesiętny.

zobacz... datediff - wynik 384 minuty tj. 384 minuty / 60 = 6,4 godziny i taki wynik mnie interesuje :)

Fac napisał(a):
SELECT 384 / 60 -- to nie działa
  ,384 / 60.0 -- to jest najprostsze, ale silnik może potraktować to jak FLOAT (pewności nie mam) i może przynieść niepożądane rezultaty
  ,CONVERT(NUMERIC(18,8),CONVERT(NUMERIC(18,8),384)/CONVERT(NUMERIC(18,8),60)) -- opcja dla przesadnie ostrożnych, precyzję musisz sobie dobrać sam :)

dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1