2017-05-08 59 views
-2

我有一個表中,如下所示我的數據庫進行數據庫更新列:
如何根據類似的數據

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

url是關於我的雲服務器的資源鏈接。這僅僅是這樣的:

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

我已經創建表了很長時間。現在,我的同事剛剛完成將所有資源上傳到雲服務器,所以我剛剛收到了所有的URL。

我需要做的是更新列url

我的同事給了我如下csv文件:

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

有一些簡單的方法(如某些SQL腳本)來更新我的表?我確信每個網址都包含name列的值。例如,http://myserver.com/USA/something包含值USA,即select name from mytable where id = 2

+0

你真的需要正則表達式嗎?如果數據樣本是上面顯示的數據,那麼您可以在更新狀態中使用類似子句statemet –

+0

@ e.arbitrio嗯,我不知道該怎麼做... – Yves

+0

你能解釋什麼是csv準確的文件?它是一個一行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

首先拆分網址,然後使用like更新網址。

功能分割值:

  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+'%'