-1

私は、人々が属する産業の情報に関するエントリを保持するテーブルを備えた DB を持っています。第一次産業と第二次産業があります。

例: 航空宇宙および防衛、小売、卸売および流通の研究開発、技術、メディアおよび電気通信など。

そのようなエントリは約 500 あります。第一次産業と第二次産業の間だけ区切り記号「,」が欲しいのですが、業種名には一切入れません。

例のために。: 航空宇宙および防衛、小売、卸売および流通

のように見えるはずです

航空宇宙および防衛、小売卸売および流通 (コンマなし)

とにかく、これは達成できますか、つまり、一次用語に影響を与えずに二次用語からコンマを置き換えます。

4

3 に答える 3

2

まず、テーブルのデザインが間違っています。1 つの列に、コンマで区切られた一連の値をリストすることはできません。これは対処するのに悪夢です (ご存じのとおり)。

代わりに、人を業界にリンクする別のテーブルが必要であり、1 人あたり複数の行を許可します。

person_id          industry
1                  Retail, Wholesale and Distribution
1                  Aerospace and Defense
2                  Retail, Wholesale and Distribution

次に、個人またはグループの業界を見つける必要があるときはいつでも、このテーブルに参加してください。

明らかに、これによりカンマの問題が解消されます。

もちろん、時にはあなたは愚かなテーブルのデザインで立ち往生しています. replace()もしそうなら、 (置換機能について言及した他の回答に感謝します)を使用して代替ソリューションを考え出すことができます。

アップデート:

これが実用的なSQLFiddleソリューションです:

使用するように更新replace():

update bad_design 
   set bad_design.industries = 
       replace(bad_design.industries, from_str, to_str)
    from (
      select * from bad_design join replacements 
         on replace(bad_design.industries, from_str, to_str) <> '' 
    ) as a
    where a.person_id = bad_design.person_id;

注: これは、1 回のパスで同じ文字列に対して複数の置換を実行しません。そのためには、再帰クエリなど、さらに何かが必要になります。

于 2013-02-12T14:31:24.257 に答える
0

SUBSTRING()、INSTRING() 関数を使用して文字列内の最初のコンマを検索し、例から判断して REPLACE() 2 番目のコンマを検索する必要があります。質問事項: 文字列の 2 番目のコンマを常に置き換える必要があると想定しても安全ですか? あなたのすべての文字列は、あなたの例と同じか似ていますか? など... この例では、上記のすべてを前提としています。また、デュアルテーブルを他のテーブルに置き換え、Oracle構文をSQLのバージョンに置き換えます-私が知る限り、SQL ServerのSUBSTR() = SUBSTRING。同じことが INSTR() にも当てはまります...:

SELECT str -- orig str --
     , SUBSTR(str, 1, INSTR(str, ',', 1, 1)) first_string
     , REPLACE(SUBSTR(str,  INSTR(str, ',', 1, 1)+1), ',', '') second_string
  FROM
   (
    SELECT 'Aerospace and Defense,Retail, Wholesale and Distribution' str 
      FROM dual
    )
  /

出力 (テスト済み) - SQL サーバーの構文を使用して、first_string と second_string を連結する必要があります。Oracle では、SELECT first_string ||''|| になります。second_string FROM...:

  Aerospace and Defense, Retail Wholesale and Distribution

SQL SERVER で DUAL テーブルを作成します: http://blog.sqlauthority.com/2010/07/20/sql-server-select-from-dual-dual-equivalent/

于 2013-02-12T14:48:24.013 に答える
0

テーブルで置換を実行できます...

select replace(column_name,'Retail, Wholesale','Retail Wholesale')
from table

または更新

update table
set column_name = replace(column_name,'Retail, Wholesale','Retail Wholesale')

これは基本的に、特定の列の文字列 'Retail, Wholesale' を 'Retail Wholesale' に置き換えます。

于 2013-02-12T14:39:38.657 に答える