2016-10-21 14 views
-3

packagesのテーブルはpack_idspeedです。 私はスピードのために、次の値が設定されていますSQLは文字列から数値を抽出し、intに変換します

1.5Mbps, 10Mbps, 12Mbps, 2.5Mbps, 5Mbps, 750Kbps 

は、どのように私は速度の数値列にすることを変換することができますか? ありがとう、 Tamir

+0

文字列関数から文字列を削除することもできます(https://msdn.microsoft.com/en-us/library/ms181984.aspx)次に、両方の部分をそれぞれ1つの列に追加します。 'Mbps'、' Kpbs'などのすべての可能なスピード名を格納し、そこにreqeringしてそのキーだけを 'packages'テーブルに格納する別のテーブルを持つのが最善でしょう。 – Nebi

+0

実際のテキスト値が唯一のものであれば、空の文字列を持つMbpsとKbpsの簡単な 'REPLACE'をしてから数値にキャストするだけで十分でしょう。 – Jens

+0

どのdbmsを使用していますか?あなたはすでに2つの製品固有の回答を得ています。間違ったdbmsの答えを書いている時間を無駄にしていないことを願っています。 – jarlh

答えて

0

お客様の要件に応じてサンプルを用意しています。 SQL Server用のサンプルが用意されていることに注意してください。

あなたのDBMSに基づいて以下の科目を検索します。 OracleのPATINDEX

  • :OracleのREGEXP_LIKE

  • :SQL Server用の

    1. REGEXP

    次のSQL Server用です

    declare @Speed as varchar(50)='1.5Mbps' 
    
    select Left(
         SubString(@Speed, PatIndex('%[0-9.-]%', @Speed), 8000), 
         PatIndex('%[^0-9.-]%', SubString(@Speed, PatIndex('%[0-9.-]%', @Speed), 8000) + 'X')-1) 
    

    下記のリンクから「PATINDEX」の詳細を知ることができます。

    https://msdn.microsoft.com/en-IN/library/ms188395.aspx

  • +0

    dbmsが指定されていない質問に対する製品固有の回答。 – jarlh

    0

    あなたのデータベースに基づいてこれを達成することができ、複数の方法があります。

    シンプルSUBSTR、INSTRアプローチ:私はあなたのデータベースに応じて実装できるロジックについてあなたのアイデアを与えるだろうこと、のTeradata SQLを使用して、それを試してみました

    select substr(speed,1,instr(speed,'bps')-2); 
    

    正規表現のアプローチ

    select REGEXP_SUBSTR (speed, '[\d.]*'); 
    

    あなたの質問で見落としたことの一つはスピードのUOMです。値はKbpsとMbpsの両方として設定されます。したがって、Kbpsの場合はMbpsにも変換する必要があります。

    関連する問題