ผมเก็บเวลา เป็นทศนิยม ถ้านำไปบวกกันแล้วแปลงให้เป็นชั่วโมง ต้องเขียนฟังก์ชันอย่างไรครับ
ผมว่าจัดเก็บใหม่ให้มันถูกรูปแบบดีกว่านะครับ
แต่เมื่อมันแบบนี้ เปลี่ยนรูปแบบ ให้เป็น time จริงๆ ก่อน
select cast( REPLACE( '1.20', '.', ':') as time)
เมื่อได้ time แล้ว จะเอาไปทำอะไรกับ time ต่อ ก็ดู ฟังชั่นเกี่ยวกับ time เลยนะครับ
Date :
2014-10-20 08:13:26
By :
Chaidhanan
ขอบคุณครับ
แล้วถ้าจะ sum ข้อมูลเวลาที่ได้มาต้อง ทำยังไงครับ
พอดีมันได้เวลามาแล้ว แต่พอจะ sum แล้ว error
Code (SQL)
SELECT gensumtime, CAST(REPLACE(gensumtime, '.', ':') AS time)
FROM `gen`
WHERE gendate LIKE '%%/%%/2014'
ประวัติการแก้ไข 2014-10-21 02:18:37 2014-10-21 02:20:58 2014-10-21 02:22:47 2014-10-21 02:27:33 2014-10-21 02:31:04 2014-10-21 02:33:57
Date :
2014-10-21 02:06:16
By :
zoberranger
เนื่องจาก ข้อมูลรูปแบบไม่เป็นมาตรฐานเดียวกัน ซึ่งถ้าเป็น 0.00 คงใช้สูตร เมื่อกี้ได้
แต่เมื่อมันเป็นแบบนี้แล้ว จะรวมเวลาก็คงต้องใช้ สูตรนี้
1 แยกเวลา ชั่วโมงกับนาทีออกจากกัน เพราะ ที่เก็บ เป็นเลขฐาน 10 แต่ ชั่วโมงนาที เป็นเลขฐาน 60
2 รวมชั่วโมง รวมนาที
3 หาผลรวมที่แท้จริง ชั่วโมง + ( นาที / 60) , เศษของ นาที ที่เหลือ
Code (SQL)
select
(all_hour + cast((all_min / 60) as unsigned)) as ttl_hour, # ผลรวมชั่วโมงที่แท้จริง
(all_min % 60) as ttl_min # เศษของ นาที ที่เหลือ
from
(
select
sum( cast( gensumtime as unsigned) ) as all_hour, #ทำในวงเล็บเป็น integer แล้วรวม ด้วย sum
sum( cast( (gensumtime * 100) as unsigned ) % 100) as all_min # หาเศษของ 100 ของในวงเล็บ x 100 แล้วรวมด้วย sum
from `gen
) as tmp
Date :
2014-10-21 07:55:50
By :
Chaidhanan
ผมทำอย่างคุณ Chaidhanan ไม่ได้ เลยลองทำเองเลยออกมาเป็นแบบนี้ครับ
เพิ่มทศนิยมให้เป็น 2 ตำแหน่ง แล้วเอาหน้าจุดไปคูณ 60 ได้เป็นชั่วโมง
ส่วนหลังจุด แล้วเอาไปบวกกับหลังจุดทศนิยมที่เป็นนาที
ได้เหมือนกัน
Code (SQL)
$sqltxt="SELECT *, ROUND( `gensumtime`, 2) AS gensumtime2 FROM `gen`
WHERE $genSql gendate LIKE '%%/%%/$year'
ORDER BY idgen DESC";
$result = mysql_query($sqltxt);
while ($rs = mysql_fetch_array ($result))
{
$gensumtime2=$rs['gensumtime2']."<br>";
$hour=substr($gensumtime2, 0, 1)."<br>";
$hour=($hour*60)."<br>";
$min=substr($gensumtime2, 2, 2)."<br>";
echo (int)$gensumtime3=$hour+$min."<br>";
?>
<?
}echo "<br>Total Time : ".$gensumtimeTotal;
?>
Database มันอาจแปลกๆ ไปหน่อยครับ เพราะเค้าทำมา 5-6 ปีแล้วครับ
Date :
2014-10-22 00:04:48
By :
zoberranger
ทำอย่างไรก็ได้ครับ ให้ result มันออกมาตรงตามความต้องการ ก่อน
แล้วค่อยลองศึกษาอย่างอื่นดู อย่างน้อยก็ได้หลักการคำนวณแล้ว
แต่จะใช้วิธีไหน ก็ต้องลองครับ
สำหรับอันนี้เป็น ตัวอย่างการ run code นะครับ
Code (SQL)
select
(all_hour + cast((all_min / 60) as unsigned)) as ttl_hour,
(all_min % 60) as ttl_min
from
(
select
sum( cast( gensumtime as unsigned) ) as all_hour,
sum( cast( (gensumtime * 100) as unsigned ) % 100) as all_min
from gen
) as tmp
Date :
2014-10-22 08:26:25
By :
Chaidhanan
ผมตามอ่านจะตอบตั้งแต่ถามครั้งแรกล่ะ....
เวลาสัดส่วนมันอยู่ที่ 60
แต่ทศนิยมสัดส่วนมันอยู่ที่ 100
มันมีความต่าง การจะปรับเวลาให้เป็นทศนิยม ไม่แนะนำครับ
การบวก ลบ หาผลต่าง ของเวลามีฟังก์ชั่นอยู่ครับ
มันจะช่วยตอบโจทย์ และประหยัดเวลา
ไม่ต้องมาเสียเวลาแปลงด้วยครับ
Date :
2014-10-22 16:08:42
By :
apisitp
Load balance : Server 01