3

REQ0000001,REQ0000002....REQ0000010, REQ0000011...., REQ0000099 REQ0000100.....request_id は、最初の 3 文字が REQ で、その後に 7 文字が続く (数字はシーケンス)という形式になるという要件があります ... この request_id は、mysql テーブルの主キーです。

テーブルの最後のエントリが REQ0000009 であると仮定すると、次のエントリは REQ0000010 になります.. perl でそれを行うには??

私は次の方法を使用しています:

$sql_query = "select request_id from requests order by request_id DESC LIMIT 1";

この値を変数 x に格納します。それから

$x = reverse $x;  #Reverse the String
chop $x; # Chop the last Character (here R)

chop $x; # Chop the last Character (here E)

chop $x; # Chop the last Character (here Q)

$x = reverse $x; # Again Reverse
$x = $x  + 1; # Add 1

if ( length($x) eq 1) # if length ==1{

    $NextReq_id = 'REQ000000'.$x;

elsif ( length($x) eq 2)


    $NextReq_id = 'REQ00000'.$x;

elsif ( length($x) eq 3)


    $NextReq_id = 'REQ0000'.$x;

elsif ( length($x) eq 4)
{

$NextReq_id = 'REQ000'.$x;
} 

これを行うより良い方法はありますか?

4

3 に答える 3

3

perl で文字列をインクリメントできます。

if ($x lt 'REQ9999999') {
    $nextRequestId = $x;
    $nextRequestId++;
} else {
    // you ran out of request ids
}

(チェックしないと、REQ9999999いつかは終わりますRER0000000

于 2012-05-27T11:13:44.000 に答える
2
$sql_query = "SELECT CONCAT('REQ',LPAD(CAST(SUBSTR(request_id,4,7) AS UNSIGNED)+1,7,'0')) ORDER BY request_id DESC LIMIT 1"
于 2012-05-27T11:11:08.067 に答える
1

sprintf を使用して、文字列の左に 0 を埋め込む

sprintf("REQ%08d", $x)
于 2012-05-27T11:08:58.007 に答える