mysql计算多少天后的日期_数据库 - mysql 计算某个时间,多少天后,多少个月后时间戳...
數據庫設計(一): 數據庫設計步驟: ?需求分析--------> ?邏輯設計 ------------> 物理設計----------->維護優化。 【1】需求分析:分析需要存儲的數據,數據的特性,數據的生命周期。 【2】邏輯設計: 【3】物理設計: 【4】維護優化: 舉一個列子:比如一
id start_time period_ytpe period_value 1 1461427200 day 3 2 1461427200 month 2
如上表,
start_time 表示開始時間,
period_ytpe 表示期限類型,
period_value表示期限值,
第一第記錄表是 3天,第二條表示2個月
如果查詢出,從start_time開始,期限在今天之前的記錄
比如:
第一條,start_time開始, 三天后的時間戳,如果是在今天(2016-06-04)之前,則是滿足條件!
第二條,start_time開始, 兩個月后的時間戳,如果是在今天(2016-06-04)之前,則是滿足條件!
____________________________________分割線_________________________________________
感謝各位的回答,在不改數據庫的情況下(數據表已經被很多地方引用,且不是我設計),我自己寫了一條SQL,做了幾步轉換,感覺性能不會好,但好像可以用了,還好這個表數據量不大,每天最多新增一條新記錄。
把開始start_time轉為date,再DATE_ADD加上 日或者月,得到時間再轉為 unix_time
用今天凌晨 UNIX_TIMESTAMP(CURDATE())減去 上面得到的時候,如果結果大于 0,那就是想要的結果
SELECT `id`,`name`,
CASE `period_type`
WHEN 'day'
THEN UNIX_TIMESTAMP(CURDATE())-UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(`start_time`),INTERVAL period_value day))
WHEN 'month'
THEN UNIX_TIMESTAMP(CURDATE())-UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(`start_time`),INTERVAL period_value month))
ELSE ''
END AS 'time_interval'
FROM `table`
WHERE `xxxxxxx'
HAVING time_interval>0
ORDER BY time_interval desc,
不知道你用的啥語言。
用最笨的辦法~~
先用你的語言獲取到今天的時間戳。例如1465056000
SELECT * FROM `table` WHERE `period_ytpe` = 'day' AND `start_time` + 86400*`period_value` < 1465056000
UNION
SELECT * FROM `table` WHERE `period_ytpe` = 'month' AND `start_time` + 86400*30*`period_value` < 1465056000
當然缺陷就是,一個月默認當他30天了。
如果你是要用mysql去計算。。那把start_time存成時間類型吧。。然后用date_add去計算
AND話外題。。為啥設計表的時候不直接算好end_time呢?非要篩選的時候去用,計算類的會導致索引失效,很不好。各種掃表,
時間存儲建議將字段設置為 timestamp 或者 datetime 類型, 而不是數值類型的時間戳.
首先數值類型的時間戳不便於 SQL 中查詢, 另代碼中也需要進行轉換
在數值類型 SQL 中相關函數也無法使用, 需要先對數值類型時間戳轉換城 timestamp 或者 datetime 類型在計算【目的】 1.掌握MySQL數據庫的使用方法。 2.掌握Java操作MySQL數據庫的方法。 【目標】 目標1:MySQL數據庫的基本操作,包括MySQL的安裝、創建數據庫、數據表、增刪改查操作(80分)。 目標2:Java操作MySQL數據庫,包括基本步驟和具體的編碼實現(90分)。
如果是 timestamp 或者是 datetime 可以使用 date_add 函數增加或者減少時間達到時間的要求
例如
select date_add(start_time, interval 1 day) from t
給 start_time 增加一天,
明確問題,你應該是要求start_time在某天或者某月之后的時間戳。
思路:用當前時間轉換成date格式,將date加上你要獲取的某天或某月的數值,然后將結果轉成時間戳
date_add(date,interval n exp)
其中date為date時間格式,如果是時間戳需要轉換,exp可以為
SECOND 秒 SECONDS MINUTE 分鐘 MINUTES HOUR 時間 HOURS DAY 天 DAYS MONTH 月 MONTHS
YEAR 年 YEARS MINUTE_SECOND 分鐘和秒 "MINUTES:SECONDS" HOUR_MINUTE 小時和分鐘 "HOURS:MINUTES"
DAY_HOUR 天和小時 "DAYS HOURS" YEAR_MONTH 年和月 "YEARS-MONTHS"
HOUR_SECOND 小時, 分鐘, "HOURS:MINUTES:SECONDS" DAY_MINUTE 天, 小時, 分鐘 "DAYS HOURS:MINUTES" DAY_SECOND 天, 小時, 分鐘, 秒 "DAYS HOURS:MINUTES:SECONDS"
1.從start_time開始3天后的時間戳:
MYSQL代碼如下
select UNIX_TIMESTAMP(date_add(FROM_UNIXTIME(start_time), interval 3 day)) from t
3代表你要加的天數,將T換成你的數據庫的任意表執行即可
2.從start_time開始N月后的時間戳:
select UNIX_TIMESTAMP(date_add(FROM_UNIXTIME(start_time), interval 3 MONTH)) from t
此函數數MYSQL的,其他數據庫也有相應的函數,但是沒有測過。,
試著寫了一下,失敗了。
期望的SQL:
SELECT * FROM table
WHERE start_time < UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL `period_value` `period_type`));
結果以上SQL語法有誤,
較為接近的SQL:
SELECT * FROM table
WHERE start_time < UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL `period_value` DAY));
但這就用不上period_type字段了。
其實正如@lyt8384 所說,在SQL語句里運用不適當的運算會讓索引失效的,查詢效率也會相應下降。
如果有權限改變表結構的話,可以新增一個end_time字段,end_time(單位:s)=start_time + period_type * period_value,然后對end_time字段做索引,這樣做應該比較好。
總結
以上是生活随笔為你收集整理的mysql计算多少天后的日期_数据库 - mysql 计算某个时间,多少天后,多少个月后时间戳...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql索和使用引的创建_MySQL索
- 下一篇: restful java demo_ja