日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习关于时间在sql里面的对比,用if语句(这个有点特别)

發布時間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习关于时间在sql里面的对比,用if语句(这个有点特别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:假如當前時間是大于starttime且小于endtime的則按starttime倒序排列顯示一條記錄;假如當前時間小于starttime且小于endtime則按starttime正序排列顯示一條記錄。要在一次sql查詢中完成。

====這個是論壇里面的,人家給出答案了,我只是學習的.算做個學習筆記,也許以后會用到。怕腦子壞了

?

SELECT FROM_UNIXTIME( starttime, '%Y年%m月%d日 %H時%i分%s秒' ) AS starttime, FROM_UNIXTIME( endtime, '%Y年%m月%d日 %H時%i分%s秒' ) , if( starttime < UNIX_TIMESTAMP( ) , starttime - UNIX_TIMESTAMP( ) , ( starttime - UNIX_TIMESTAMP( ) ) +20000000 ) AS t FROM test WHERE endtime > UNIX_TIMESTAMP( ) ORDER BY t ASC LIMIT 0 , 30

  

if()函數就是實現這個的關鍵。
IF(expr1,expr2,expr3)?
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數字值或字符串值,具體情況視其所在語境而定。

為true
執行 starttime - UNIX_TIMESTAMP() 按得到的值asc排序這樣就得到了“距離現在最近的starttime,也就是剛剛已經開始的”記錄列表
為false
執行 (starttime - UNIX_TIMESTAMP())+20000000?
starttime - UNIX_TIMESTAMP()這樣得到了 “starttime距離現在最近的,也就是馬上將要到來的starttime”記錄列表;由于 “未開始記錄的”starttime - UNIX_TIMESTAMP() 得到的值可能小于“已開始記錄的”starttime - UNIX_TIMESTAMP() 的值,這種情況下排序就混亂了,所以要加上一個很大的值20000000避免這種情況,這樣就能保證未開始記錄的starttime永遠大于已開始記錄的starttime值,這樣未開始的值記錄排在了已開始記錄之后了。

?

轉載于:https://www.cnblogs.com/xiangxiaodong/archive/2012/12/21/2828609.html

總結

以上是生活随笔為你收集整理的学习关于时间在sql里面的对比,用if语句(这个有点特别)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。