-2

以下のシナリオはほとんどありません。C、-1C、-2Cなどを削除する方法を教えてもらえますか。

さまざまな方法でデータを取得しています

Examples:  test1C : To extract as test1

           test1-1C :to extract as test1

           test1-2C : to extract as test1.
           testC1C : to extract as testC1
           testCC: to extract as testC

substr関数とinstr関数を試してみましたが、親指を立てることができませんでした。上記の例では、期待されるデータは必ずしも長さ「5」のようになるとは限りません。データは異なりますが、「C」または「-1C」または「-2C」が追加されたデータの場合もあります。

よろしく、

チャイトゥ

4

6 に答える 6

1

ただ

regexp_replace(str, '-[^-]*|C$', '')

例えば

SQL> with data as (select 'test1C' str, 'test1' expected from dual
  2                union all
  3                select 'test1-1C', 'test1' from dual
  4                union all
  5                select 'test1-2C', 'test1' from dual
  6                union all
  7                select 'testC1C', 'testC1' from dual
  8                union all
  9                select 'testCC', 'testC' from dual)
 10  select str, expected, regexp_replace(str, '-[^-]*|C$', '') actual
 11  from data;

STR      EXPECT ACTUAL
-------- ------ ----------
test1C   test1  test1
test1-1C test1  test1
test1-2C test1  test1
testC1C  testC1 testC1
testCC   testC  testC

SQL>
于 2012-12-10T21:24:03.627 に答える
0
  1. select replace(column_name、'C'、'')fromtable_name-これはsybaseで正常に機能します
  2. select replace((select replace(column_name、'-'、'')from table_name)、C、'')
  3. select replace((select replace(column_name、'-'、'')from table_name)、C、'')
于 2012-12-10T18:57:33.203 に答える
0

1つの解決策は、一時テーブルを作成し、すべてのデータをそれらにダンプすることです。次に、更新機能を使用して、そこで値を更新します。手順は次のようになります

  1. 一時テーブルを作成する
  2. 一時テーブルにデータを書き込む
  3. 一時テーブルを更新します。必要に応じて列の値を更新します。
于 2012-12-10T19:06:35.493 に答える
0

このクエリはどうですか?

select substring_index(substring_index('test1-2C', 'C', 1), '-', 1)

働き:

create function mytrim(p_text varchar(100))
returns varchar(100)
begin
  set @text = reverse(p_text);
  set @l = locate('-', @text);
  if @l > 0 then
    return reverse(substring(@text, @l + 1));
  elseif locate('C', @text) > 0 then
    return reverse(substring(@text, 2));
  else
    return p_text;
  end if;
end
于 2012-12-10T19:07:40.910 に答える
0

単に最初の5文字を​​抽出しようとしている場合は、Substrは問題なく機能するはずです。つまり、上記のすべてのSUBSTR(Column_Name、1,5)は、「test1」を提供します。私は何かが足りないのですか?

于 2012-12-10T18:57:33.807 に答える
0

最初の5文字だけを取ってみませんか?

left(val, 5)

ルールは次のとおりです。ハイフンがある場合、ハイフンの前のすべて。「C」がある場合は「C」の前のすべて、それ以外の場合はすべて:

left(val, (case when locate('-', val) > 0 then locate('-', val) - 1
                when locate('C', val) > 0 then length(val) - locate('C', reverse(val)) - 1
                else length(val)
            end))

これが大文字と小文字のcを区別するために機能するかどうかは、照合シーケンスによって異なります。

于 2012-12-10T19:01:32.363 に答える