1. 程式人生 > >MYSQL—— TIME_TO_SEC函式與UNIX_TIMESTAMP函式區別

MYSQL—— TIME_TO_SEC函式與UNIX_TIMESTAMP函式區別

今天遇到個需求,統計充電的訂單,充電時長,懶得用Java了,直接就在資料庫函式搞起來,結果放到線上執行後發現很多充電時長為負數的訂單,才發現這個問題。

首先是STR_TO_DATE

這個函式是吧varchar格式的時間轉成時間格式, 

STR_TO_DATE(begin_charge_time,'%Y-%m-%d %H:%i:%s')
這樣就成時間格式了

然後TIME_TO_SEC

返回 time 引數,轉換成秒。可以直接在mysql執行

SELECT TIME_TO_SEC('22:23:00'); 結果為 80580

我的寫法是
 (TIME_TO_SEC (STR_TO_DATE(end_charge_time,'%Y-%m-%d %H:%i:%s')) -
 TIME_TO_SEC (STR_TO_DATE(begin_charge_time,'%Y-%m-%d %H:%i:%s'))) EquipmentChargeTime


一般都沒問題,可我有個訂單時間是end_time:2017-05-10 00:35:28,begin_time:2017-05-09 23:28:11
SELECT TIME_TO_SEC('2017-05-10 00:35:28'); 輸出為 2128
SELECT TIME_TO_SEC('2017-05-09 23:28:11'); 輸出為 84491
相減就是負數了。

原來 TIME_TO_SEC 是把 時分秒轉為 秒,並不會對年月日進行處理

UNIX_TIMESTAMP這個函式返回的是自1970年以來的秒數,所以時間計算用這個是靠譜的
正確使用方式

 (UNIX_TIMESTAMP(STR_TO_DATE(end_charge_time,'%Y-%m-%d %H:%i:%s')) -
 UNIX_TIMESTAMP(STR_TO_DATE(begin_charge_time,'%Y-%m-%d %H:%i:%s'))) EquipmentChargeTime

相關推薦

MYSQL—— TIME_TO_SEC函式UNIX_TIMESTAMP函式區別

今天遇到個需求,統計充電的訂單,充電時長,懶得用Java了,直接就在資料庫函式搞起來,結果放到線上執行後發現很多充電時長為負數的訂單,才發現這個問題。 首先是STR_TO_DATE 這個函式是吧var

MySQL的FROM_UNIXTIME()和UNIX_TIMESTAMP()函式區別

from_unixtime()是MySQL裡的時間函式date為需要處理的引數(該引數是Unix 時間戳),可以是欄位名,也可以直接是Unix 時間戳字串後面的 '%Y%m%d' 主要是將返回值格式化例如:mysql>SELECT FROM_UNIXTIME( 1249

Python學習之函式方法的區別

函式和方法嚴格意義上講都是可執行的一個程式碼段,擁有輸入和輸出 在Python中函式為內建的,函式是已經封裝的一些獨立的功能,同時也滿足自建的一些函式。 import keyword print(keyword,kwlist) 則輸出結果為'False', 'None', 'True', '

從頭開始學MySQL-------儲存過程儲存函式(4)

儲存過程與儲存函式的補充 MySQL的儲存過程與儲存函式有什麼區別?         儲存函式只能通過return語句返回單個值或者表物件。         儲存過程不能用return,但是可

C語言malloc()函式calloc()函式區別

推薦部落格: 推薦部落格:https://blog.csdn.net/ddcodingya/article/details/80452397   推薦部落格:https:https://blog.csdn.net/Hackbuteer1/article/d

mysql中date_adddate_sub函式使用詳解

           mysql中date_add與date_sub函式使用詳解   轉載:http://www.111cn.net/database/mysql/52936.htm 在mysql中date_a

realloc函式,malloc函式calloc函式區別

一, malloc   void *malloc(unsigned int num_byte) 1,num_bytes為需要申請的記憶體大小,需要人為的去計算,申請的型別徐手動強轉為對應指標的型別 2,申請的值是不確定的 二 calloc void*calloc(

JS中建構函式普通函式區別及JS建構函式、原型和例項的關係

JS中建構函式與普通函式的區別: https://www.cnblogs.com/cindy79/p/7245566.html JS建構函式、原型和例項的關係: https://blog.csdn.net/u012443286/article/details/78823955 Java

靜態函式動態函式區別

靜態函式只有當程式結束的時候才從記憶體消失。靜態成員函式不需要類例項化就能呼叫的而非靜態則是動態載入到記憶體,不需要的時候就從記憶體消失。C#中:靜態變數  static  int a,可變,  靜態常量 const int b,在在靜態常量基礎上進一步限制,不可變介面中的屬

c++中靜態函式動態函式區別

在C語言中,由於沒有類的概念,所以沒有靜態成員一說,在c中static的作用主要有2個: 一是隱藏功能,對於static修飾的函式和全域性變數而言二是保持永續性功能,對於static修飾的區域性變數而言。並且,因為存放在靜態區,全域性和區域性的static修飾的變數,都預設

matlab中 str2num 函式 str2double 函式區別

                         str2num 函式與 str2double 函式的相同點與不同點 1. 相同點: 當str為一個含數字的

建構函式 匿名函式 普通函式區別 以及啥是閉包

//普通函式 function person2 (name,age) { this.name=name; this.age=age; this.sayName=function () { console.log(this.name); } console.lo

箭頭函式普通函式區別

普通函式中的this:    1. this總是代表它的直接呼叫者, 例如 obj.func ,那麼func中的this就是obj    2.在預設情況(非嚴格模式下,未使用 'use strict'),沒找到直接呼叫者,則this指的是 window    3.在嚴格模式下

stl裡關於heap的函式priority_queue的區別

大家都知道,priority_queue是用堆實現的,可以通過過載()運算子選擇使用最大堆或最小堆。以前一直覺得stl裡面的heap相關的函式都是多餘的,因為一般的heap操作都可以用priority_queue來做。直到今天看了July部落格中的那道求前k小的數(http

巨集函式普通函式區別

我們由問題展開: 1.什麼是巨集函式? 2.巨集函式與普通函式的相同點?不同點? 3.巨集函式與普通函式的優缺點? 什麼是巨集函式? 在這之前看一下巨集的定義: 巨集 巨集是根據一系列預定義的規則替換一定的文字模式。 #define

oracle ——function函式procedure的區別

function函式和上節講到的procedure差不多,定義結構差不錯,作用也差不多。 function函式的結構: create or replace function 函式名 (傳入/傳出引數) return 返回型別  is 定義變數 begin pl/sql體內容

atan函式atan2函式的一點區別

 atan 和 atan2 都是求反正切函式,如:有兩個點 point(x1,y1), 和 point(x2,y2); 那麼這兩個點形成的斜率的角度計算方法分別是: float angle = atan( (y2-y1)/(x2-x1) ); 或 float angle =

MySQL資料彙總聚集函式——MySQL系列(七)

1、聚集函式 聚集函式是執行在行組上,計算和返回單個值的函式。 SQL聚集函式 函式 說明 AVG() 返回某列的平均值 COUNT() 返回某列的行數 MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某個列之和 (1)、AVG()函式 可以返回

【字串】strlen函式sizeof的區別

對於 strlen 和 sizeof,相信不少程式設計師會混淆其功能。雖然從表面上看它們都可以求字串的長度,但二者卻存在著許多不同之處及本質區別。 strlen 是一個函式,它用來計算指定字串 str 的長度,但不包括結束字元(即 null 字元)。其原型如下面的程式碼所示: 1 size_t st

python print 函式print語句區別

print語句與print函式的區別 print語句 在Python 2中,print語句最簡單的使用形式就是print A,這相當於執行了sys.stdout.write(str(A) + '\n')。如果你以逗號為分隔符,傳遞額外的引數(argument),這些引