首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL:每天将当前id值更改为序列id

问MYSQL:每天将当前id值更改为序列id
EN

Stack Overflow用户
提问于 2015-01-13 07:19:33
回答 2查看 113关注 0票数 0

我想从下面的记录中显示id值:

代码语言:javascript
复制
id      name            date
24811   Foo             2011-04-26
24812   Bar             2011-04-26
24813   Bars            2011-04-27

变成这样的格式:

代码语言:javascript
复制
date + Q + 4 digit ID sequence start from first ~ last

结果是:

代码语言:javascript
复制
id              name            date
20110426Q0001   Foo             2011-04-26
20110426Q0002   Bar             2011-04-26
20110427Q0001   Bars            2011-04-27 

但我只是有个半边的疑问,怎么做四位数呢?

代码语言:javascript
复制
SELECT REPLACE( CONCAT( DATE( Inspection_datetime ) ,'Q',/*missing this query..*/),'-','') AS id,
       name,date
FROM mytable

试着回答如下:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-24 03:10:36

我不知道为什么哈立德的这两个查询在我的Mysql中都不起作用。即使我在sqlfiddle尝试过,它也能工作,但在我的数据库中不起作用。一周后,我为这个问题疯狂,我得到了答案:

我使用Khalid的第二个答案,然后尝试删除:

代码语言:javascript
复制
cross join (select @g=null, @r:= 0) t

然后在选择之前添加:

代码语言:javascript
复制
set @g=null,@r:= 0;
票数 0
EN

Stack Overflow用户

发布于 2015-01-13 07:32:35

您可以通过使用用户定义的变量来实现。

代码语言:javascript
复制
select 
@r:= case when @g = date then @r +1 else 1 end rownum,
@g:= 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

如果你只关心日期部分,而不是时间部分,那么你可以这样做。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27916795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档