簡體   English   中英

MySQL:如果日期更改,則重置ID從1開始

[英]Mysql : reset id start from 1 if day change

我制作了一個唯一的ID,其中包含CURRENT_DATE和以下字符:

SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',
      LPAD(MAX(RIGHT(idreport,3))+1,3,'0')) 
FROM record.report

結果:

20140723Q001

我希望每天都從001開始。 因此,如果上面的查詢正確,那么我今天將得到像20140724Q001這樣的結果。 但是我得到了錯誤的結果20140724Q002 如果日期更改,如何重置ID后面的3位數字?


完整的語法:

$sql="SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',LPAD(MAX(RIGHT(idreport,3))+1,3,'0')) 
                FROM record.report";
  $res=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );  
  $dat1=mysql_fetch_array($res, MYSQL_NUM);
  if($dat1 == 0){ 
        $sql = "SELECT DATE_FORMAT(CURRENT_DATE,'%Y%m%d')";
        $res1=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );
        $dat2=mysql_fetch_array($res1, MYSQL_NUM);
        // first number
        $RegNum = $dat2[0]."Q001";
        } else {
                $RegNum = $dat1[0];
                }

盡管我們可以有一個更優化的解決方案,但這應該可以完成您的工作-

SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',
      LPAD(MAX(RIGHT(CASE WHEN LEFT(idreport,8)=DATE_FORMAT(CURRENT_DATE,'%Y%m%d') THEN idreport ELSE '000' END,3))+1,3,'0'))
FROM record.report;

如有任何疑問,請告訴我。

暫無
暫無

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

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