2016-04-12 67 views
0

我試圖將郵政編碼插入到我的數據庫中,但擺脫了下劃線。 我有一個名爲FeedDataSetMapping表用來映射字段得到插入才:如何用SQL中的正則表達式用空格替換下劃線

INSERT INTO FeedDataSetMapping (

    [source_field] 
    ,[database_field] 
    ,[template_id] 
    ,[conversion_id] 
    ,[order_id] 
    ,[values_group] 
    ,[direct_value] 
    ,[value_regex] 
    ,[condition_regex] 
    ,[split_separator] 
    ,[enclosing_character] 
    ,[cumulative_field] 
    ,[cumulative_format]) 
    VALUES 
    ('manufacturerId','manufacturer_Id',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('dealership','leasing_broker_name',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('manufacturersDealerId','supplier_ref',@template_id,0,0,null,null,19,null,null,null,null,null), 
    ('address1','address1',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('address2','address2',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('postcode','post_code',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('telephone','telephone',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('fax','fax_number',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('email','email',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('website','web_address',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('NewCarSales','service_mask',@template_id,0,0,null,1,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null), 
    ('UsedCarSales','service_mask',@template_id,0,0,null,2,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null), 
    ('Servicing','service_mask',@template_id,0,0,null,8,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null), 
    ('Repairs','service_mask',@template_id,0,0,null,16,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null), 
    ('Longitude','longitude',@template_id,0,0,null,null,null,null,null,null,null,null), 
    ('Latitude','latitude',@template_id,0,0,null,null,null,null,null,null,null,null) 

這已經包含在的情況下,這個字段包含它,它分別轉換爲真或假的一些文字一些條件正則表達式。 我需要的是一個condition_regex,它可以去掉這些下劃線,並用一個空格替代它,例如:'GDB_A45''GDB A45'。我不太瞭解正則表達式,所以任何想法將不勝感激。提前致謝!

+2

使用標記dbms。 (該代碼是特定於產品的。) – jarlh

+1

通過方括號看起來像SQL Server,它對RegEx的支持很差。 – trincot

+0

這確實是SQL服務器 – Tofetopo

回答

4

SQL Server沒有太多的正則表達式支持,但在這種情況下,我不認爲你需要它。你可以做一個簡單的替換:

UPDATE mytable 
SET mycolumn = REPLACE(mycolumn, '_', ' ') 
WHERE mycolumn LIKE '%[_]%' 

要做到這一點,同時更新您可以使用INSERT ... SELECT代替INSERT ... VALUES

INSERT INTO mytable (mycolumn) 
SELECT REPLACE('my data 1', '_', ' ') UNION 
SELECT REPLACE('my data 2', '_', ' ') UNION 
SELECT REPLACE('my_data_3', '_', ' ') UNION 
... 

會有你可以做,所以你應該分裂工會的一些最大數量用此方法插入批處理。

或者,您也可以定義目標表一個觸發器,它會爲你做的工作:

CREATE TRIGGER mytrigger ON mytable 
AFTER INSERT AS 
BEGIN 
    UPDATE  mytable 
    SET  mytable.mycolumn = REPLACE(i.mycolumn, '_', ' ') 
    FROM  mytable 
    INNER JOIN inserted i 
      ON i.id = mytable.id 
      AND i.mycolumn LIKE '%[_]%' 

END 

...這裏假設你的表中有一個名爲ID一個主鍵。

+2

+ 「WHERE mycolumn LIKE'%[_]%'」,由於它只會更新需要更新的行,因此日誌和時間會更輕。 :) – Kahn

+0

是的,這可以工作,問題是我必須在數據被導入之前這樣做,這就是爲什麼我使用FeedDataSetMapping,以正確的格式直接插入它,並避免做後插入更新 – Tofetopo

0

好了之後想了一會兒,我得出了一個結論,如果我在生成XML文件之前在抓取過程中(在C#代碼中)替換抓取的數據中的下劃線,會更容易。這會避免我很多頭痛。無論如何謝謝你的幫助球員;)

+0

所以,你問一個SQL問題,得到它的答案(全面),然後回答你自己的問題,使用你沒有標記或甚至在問題中提到的技術.. – Fred

相關問題