簡體   English   中英

MySQL時間戳的修改,添加和比較

[英]MySQL timestamp modification, addition, and comparison

我正在創建一個視圖,其中涉及一點時間戳。

我有一個帶有時間戳的表A。 該視圖將處理時間戳,以查看每個時間戳是否在一定范圍內(上午9點至下午5點)。 如果時間戳在該范圍內,我將在另一個表(B)中獲取與確切時間匹配的數據。 否則,我將獲取第二天(或今天)的第一個有效時間(即上午9點),並從那里獲取相應的數據。

例子:

  • 時間戳記為12/28/2012 17:01記錄->從B中獲取數據, 12/29/2012 09:0012/29/2012 09:00 ,將標志設置為after
  • 時間戳記為12/28/2012 08:59記錄->從B中獲取數據, 12/28/2012 09:0012/28/2012 09:00 ,將標志設置為before
  • 時間戳為12/28/2012 09:55記錄->從B獲取12/28/2012 09:55數據,並將標志設置為null

這是我到目前為止的內容(無法正常工作,有些使用偽代碼)。 我主要不知道如何基於比較來設置標志,然后基於標志在b上執行下一步操作-全部在一條語句中。

CREATE VIEW C as 
SELECT time, (CASE WHEN (time< '9:00' ) THEN'before'
CASE WHEN(time> '17:00') THEN'after' else null END) AS flag FROM A

//These two should be combined into one create view statement
//The below is utterly wrong, I know, but explains what I mean
SELECT(
CASE WHEN (flag=='before') THEN SELECT * FROM B WHERE B.time = time set hour='9:00'
CASE WHEN(flag=='after') THEN SELECT* FROM B WHERE B.time = time + one day set hour='9:00'
ELSE SELECT* FROM B WHERE B.time = time ) as data

使用此小提琴進行了測試: http ://sqlfiddle.com/#!2/ 15be5/50

SELECT
  q.time as original_time_check,
  q.flag as flag_check,
  case q.flag
    when 'before' then q.NINE_AM_ON_THE_DAY 
    when 'after' then q.NINE_AM_THE_NEXT_DAY 
    else q.time
  end as time


FROM
(
    SELECT
       time,
       date(time) + INTERVAL 9 HOUR as NINE_AM_ON_THE_DAY,
       date(time) + INTERVAL '1 9' DAY_HOUR as NINE_AM_THE_NEXT_DAY,  
       case
         when time < (date(time) + INTERVAL 9 HOUR) then 'before'
         when time < (date(time) + INTERVAL 17 HOUR) then 'in-range'
         else 'after'
       end as flag
    FROM 
       Your_table 
) q

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM