|  | 
	                
  
    | 
	 
        ผมเก็บเวลา เป็นทศนิยม ถ้านำไปบวกกันแล้วแปลงให้เป็นชั่วโมง ต้องเขียนฟังก์ชันอย่างไรครับ     |  
    |  |  
 
              
  
    | 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ผมว่าจัดเก็บใหม่ให้มันถูกรูปแบบดีกว่านะครับ 
 แต่เมื่อมันแบบนี้ เปลี่ยนรูปแบบ ให้เป็น 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 |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |