2017-05-08 14 views
-2

に応じてデータベースの列を更新するために、私は以下のように私のデータベース内のテーブルを持っている:
どのように同様のデータ

id  name  url 
1  France NULL 
2  USA  NULL 
... 

urlは、私のクラウドサーバー内のリソースへのリンクについてです。それはちょうどこのようなものです:

http://myserver.com/France/something 
http://myserver.com/USA/something 

私は長い時間のためにテーブルを作成しました。今すぐ私の同僚はすべてのリソースをクラウドサーバーにアップロードし終わったので、すべてのURLを受信しました。

私がする必要があるのは、列urlを更新することです。

http://myserver.com/France/something,http://myserver.com/USA/something 

私のテーブルを更新する(例えば、いくつかのSQLスクリプトなど)いくつかの簡単な方法があります:

私の同僚は私に次のようにCSVファイルを与えましたか?私は各URLに列nameの値が含まれていると確信しています。たとえば、http://myserver.com/USA/somethingにはUSAという値が含まれています。これはselect name from mytable where id = 2です。

+0

の作品あなたは本当に正規表現が必要ですか?データサンプルが上に示したものであれば、ここでlike節を使うことができますstatemet –

+0

@ e.arbitrioまあ、私はそれを行う方法がわかりません... – Yves

+0

csvの内容を説明できますか正確にファイル?それは1行csvですか? – tafia

答えて

0

私はあなたのようなサンプルデータで試してみましたし、このコードは

CREATE TEMPORARY TABLE temp_table (url VARCHAR(45)); 
LOAD DATA LOCAL INFILE 'urls.csv' INTO TABLE temp_table FIELDS TERMINATED BY ';' IGNORE 1 LINES (url); 
UPDATE cities JOIN temp_table on temp_table.url LIKE CONCAT('%', cities.name ,'%') SET cities.url = temp_table.url;cities 
DROP TEMPORARY TABLE temp_table; 

幸運

+0

それは動作していないようです... – Yves

+0

私はすべてのコードをグループ化して自分の答えを編集しました。私は今サンプルデータにSQLを再生し、それは完全に動作します。私に知らせてください –

+0

ああ私は知っている。あなたのコードはうまくいきます。しかし時々私はいくつかの特別な場合があります。私は 'abc%20def'と' abc def'をマッチさせようとしています。 – Yves

0

最初にURLを分割し、次に同様の方法でURLを更新します。値を分割する

機能:

  create FUNCTION [dbo].[SplitValues] (@StringArray NVARCHAR(MAX), @Delimiter NVARCHAR(10)) 
      RETURNS @ResultedValues table (ResultValue nvarchar(max)) 
      AS 
      BEGIN 
       declare @string nvarchar(max) 
       set @string = @StringArray 
       WHILE (CHARINDEX(@Delimiter,@String)>0) 
       BEGIN 
       INSERT INTO @ResultedValues (ResultValue) VALUES (LTRIM(RTRIM(SUBSTRING(@String,1,CHARINDEX(@Delimiter,@String)-1)))) 
       SET @String = SUBSTRING(@String, CHARINDEX(@Delimiter,@String)+LEN(@Delimiter),LEN(@String)) 
       END 
      INSERT INTO @ResultedValues (ResultValue) VALUES (LTRIM(RTRIM(@String))) 
      RETURN 
      END 

更新文:

  update t 
      set url = fn.ResultValue 
      from mytable t 
      join [dbo].[SplitValues] ('http://myserver.com/France/something,http://myserver.com/USA/something') ,',') fn 
       on fn.url like '%'+t.name+'%' 
関連する問題