[英]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.