2017-08-02 14 views
1

私の学習ではsqliteの新機能です。私の演習では、私のテーブルの名前はt1です。カラムの値はPartha000099です。私は1を増やしたいと思います。例えば、Partha000100私は出力として100を取得しています以下のクエリsqliteの分割カラムの値

SELECT SUBSTR(MAX(ID),6)+1 FROM t1 

に1ずつ増加するとき

SELECT SUBSTR(MAX(ID),6) FROM t1 

000099として出力を取得しています、今、私の質問は、私は、私が試した を期待して戻ってそれを構築する方法でありますウィ次のクエリ

SELECT 'Partha' || SUBSTR(MAX(ID),6)+1 FROM t1 

出力が1となっています。

+0

なぜ4を、? –

+0

ごめんなさい私の間違い6 – Parthasarathy

+0

もしあなたがsqliteを使い慣れていないなら、この種のキーを避けるべきだと伝えておきます。自動的にインクリメントされた番号が必要な場合は、これを行う列を作成し、別の列の「グループ」または同様のもの(Parthaが意味するもの)と組み合わせてください。次のIDを取得するために "select max(id)+ 1"はsqliteの "有効な"ソリューションかもしれませんが、後により多くの同時データベースに移行すると問題が発生します。 –

答えて

1

私の解決策はうまくいくが、私はこのタイプの鍵生成に対して助言を与えるだろう。次のキーを生成するために "SELECT MAX(ID)+1"を使用すると、より多くの同時データベースで問題が発生し、ビジー状態のアプリケーション/システムで重複キーが生成される危険性があります。

キーをグループまたは名前'Partha'の2つの列に分割し、もう1つの列が自動的に増分された数で分割する方がよいでしょう。

しかし、それはあなたの例のように次のキーを生成する方法です。

あなたがする必要がある:

  1. スプリット2
  2. インクリメントにキー数値部分
  3. は6桁

に戻って、文字列

  • パッドにそれを、それを変換します。ここですそれを行うSQL:

    SELECT SUBSTR(ID, 1, 6) || SUBSTR('000000' || (SUBSTR(MAX(ID), 7)+1), -6) FROM t1; 
    
    6桁のパッドに

    それは、私はあなたが1を得た理由は、あなたの表現が同じようにグループ化されたということでしたその式

    SUBSTR(x, -6) 
    

    このタイプの結果の文字列から最後の6桁の数字をつかむ、6ゼロを付加この:

    SELECT .... + 1 
    

    そして....一部、あなたの文字列の連結は、その後、これ0 + 1は、国連を取得するには1.

    を与え、0になった数に変換しようとしましたSUBSTR(..., 6)は、第六文字をつかみ、以降、6文字は最終的なものであるため、それはPartha1を返すよう

    SELECT 'Partha' || (SUBSTR(MAX(ID),6)+1) FROM t1 
           ^    ^
    

    これは、しかし、また間違っているだろう、それは次のとおりです。パディング結果は、あなただけのいくつかの括弧を追加しました可能性がParthaa、そうPartha100を得るためにあなたは、この必要があります: `Partha`は6つの文字を持っている

    SELECT 'Partha' || (SUBSTR(MAX(ID),7)+1) FROM t1 
               ^
    
  • +0

    [printf()](http://www.sqlite.org/lang_corefunc.html#printf)も使用できました。 –