packages
のテーブルはpack_id
とspeed
です。 私はスピードのために、次の値が設定されていますSQLは文字列から数値を抽出し、intに変換します
1.5Mbps, 10Mbps, 12Mbps, 2.5Mbps, 5Mbps, 750Kbps
は、どのように私は速度の数値列にすることを変換することができますか? ありがとう、 Tamir
packages
のテーブルはpack_id
とspeed
です。 私はスピードのために、次の値が設定されていますSQLは文字列から数値を抽出し、intに変換します
1.5Mbps, 10Mbps, 12Mbps, 2.5Mbps, 5Mbps, 750Kbps
は、どのように私は速度の数値列にすることを変換することができますか? ありがとう、 Tamir
お客様の要件に応じてサンプルを用意しています。 SQL Server用のサンプルが用意されていることに注意してください。
あなたのDBMSに基づいて以下の科目を検索します。 OracleのPATINDEX
:OracleのREGEXP_LIKE
:SQL Server用の
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」の詳細を知ることができます。
dbmsが指定されていない質問に対する製品固有の回答。 – jarlh
あなたのデータベースに基づいてこれを達成することができ、複数の方法があります。
シンプルSUBSTR、INSTRアプローチ:私はあなたのデータベースに応じて実装できるロジックについてあなたのアイデアを与えるだろうこと、のTeradata SQLを使用して、それを試してみましたselect substr(speed,1,instr(speed,'bps')-2);
正規表現のアプローチ
select REGEXP_SUBSTR (speed, '[\d.]*');
あなたの質問で見落としたことの一つはスピードのUOMです。値はKbpsとMbpsの両方として設定されます。したがって、Kbpsの場合はMbpsにも変換する必要があります。
文字列関数から文字列を削除することもできます(https://msdn.microsoft.com/en-us/library/ms181984.aspx)次に、両方の部分をそれぞれ1つの列に追加します。 'Mbps'、' Kpbs'などのすべての可能なスピード名を格納し、そこにreqeringしてそのキーだけを 'packages'テーブルに格納する別のテーブルを持つのが最善でしょう。 – Nebi
実際のテキスト値が唯一のものであれば、空の文字列を持つMbpsとKbpsの簡単な 'REPLACE'をしてから数値にキャストするだけで十分でしょう。 – Jens
どのdbmsを使用していますか?あなたはすでに2つの製品固有の回答を得ています。間違ったdbmsの答えを書いている時間を無駄にしていないことを願っています。 – jarlh