2015-01-13 18 views
0

我想從下面的記錄顯示的值id:MYSQL:改變值電流id成爲序列ID每天

id  name   date 
24811 Foo    2011-04-26 
24812 Bar    2011-04-26 
24813 Bars   2011-04-27 

成爲這個格式:

date + Q + 4 digit ID sequence start from first ~ last 

,其結果是:

id    name   date 
20110426Q0001 Foo    2011-04-26 
20110426Q0002 Bar    2011-04-26 
20110427Q0001 Bars   2011-04-27 

但我只是有一半的查詢,如何使4位數?

SELECT REPLACE(CONCAT(DATE(Inspection_datetime) ,'Q',/*missing this query..*/),'-','') AS id, 
     name,date 
FROM mytable 

後嘗試回答以下:

row @g:= `date`   id    Model   Serial  Lot_no Inspection_datetime 
1 2011-01-31 07:44:21 20110131Q0001 KW-HDR81BTJD 176X0099 010A 2011-01-31 07:44:21 
1 2011-01-31 08:31:31 20110131Q0001 KW-HDR81BTJD 176X0098 010A 2011-01-31 08:31:31 
1 2011-01-31 08:34:57 20110131Q0001 KW-HDR81BTJD 176X0065 010A 2011-01-31 08:34:57 
1 2011-01-31 08:46:43 20110131Q0001 KW-HDR81BTJD 176X0050 010A 2011-01-31 08:46:43 

回答

0

我不知道爲什麼從哈立德查詢都沒有在我的Mysql工作。 即使我試過sqlfiddle它的工作原理,但它不在我的數據庫中。 一個星期我要瘋了這個問題後,我得到了答案:

我使用的是從哈立德第二個答案,然後嘗試刪除:

cross join (select @g=null, @r:= 0) t 

然後才選擇添加:

set @g=null,@r:= 0; 
1

你精讀通過使用用戶定義的變量

DEMO

如果你關心的只是日期部分做不時間部分,那麼你可以這樣做

select 
@r:= case when @g = date(date) then @r +1 else 1 end rownum, 
@g:= date(date), 
REPLACE(CONCAT( 
    DATE(date) , 
    'Q' 
    ,lpad(@r,4,'0') 
),'-','') AS id, 
name, 
date 
from mytable 
cross join (select @g=null, @r:= 0) t 
order by date 

DEMO

+0

它也可能用於更新? – nunu

+0

@nunu是可能的你爲什麼想要更新ID列?保持原樣,並使用select查詢如果你想顯示的東西在你的問題的格式 –

+0

@ Khalid有時一些id變得太長,如果我設置列成爲autoincrement。 – nunu