2016-04-12 7 views
0

Ich versuche, Post-Codes in meine Datenbank einzufügen, aber die Unterstriche loszuwerden. Ich habe eine Tabelle FeedDataSetMapping genannt, die die Felder auf der Karte verwendet wird, bevor sie eingefügt erhalten:Wie Unterstreichung durch ein Leerzeichen mit einem regulären Ausdruck in SQL ersetzen

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) 

Diese enthält bereits eine Bedingung regex in dem Fall, dass dass dieses Feld einen Text enthält es es wahr oder falsch bzw. umwandelt. Was ich brauche, ist ein Condition_regex, das diese Unterstriche beseitigt und es durch einen leeren Raum ersetzt, d. H.: 'GDB_A45' zu 'GDB A45'. Ich weiß nicht viel über Regex, also würde jede Idee sehr geschätzt werden. Danke im Voraus!

+2

Tag dbms verwendet. (Dieser Code ist produktspezifisch.) – jarlh

+1

Durch die eckigen Klammern sieht es aus wie SQL Server, der schlechte RegEx-Unterstützung hat. – trincot

+0

Es ist in der Tat SQL-Server – Tofetopo

Antwort

4

SQL Server hat nicht viel Unterstützung für reguläre Ausdrücke, aber in diesem Fall glaube ich nicht, dass Sie es brauchen. Sie können eine einfache ersetzen tun:

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

Um dies zu tun, während die Aktualisierung Sie INSERT ... SELECT statt INSERT ... VALUES verwenden:

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

Es wird einige maximale Anzahl von Gewerkschaften, die Sie tun können, damit Sie spalten sollte Ihre Einsätze in Chargen mit dieser Methode.

Oder Sie könnten ein Auslöser für die Zieltabelle definieren, die die Arbeit für Sie tun:

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 

... wo es Tisch angenommen wird, hat einen Primärschlüssel id benannt.

+2

+ "WHERE meine Spalte LIKE '% [_]%'", die im Protokoll und in der Zeit viel leichter ist, da nur die zu aktualisierenden Zeilen aktualisiert werden. :) – Kahn

+0

Ja das könnte funktionieren, das Problem ist, ich muss es tun, bevor die Daten importiert werden, deshalb verwende ich das FeedDataSetMapping, um es in das richtige Format sofort einzufügen und zu vermeiden, Post-Updates zu tun – Tofetopo

0

Nachdem ich eine Weile nachgedacht habe, kam ich zu dem Schluss, dass es einfacher wäre, wenn ich den Unterstrich während des Scrapings (im C# -Code) vor dem Generieren der XML-Datei ersetze. Das würde mir viele Kopfschmerzen ersparen. Wie auch immer, vielen Dank für Ihre Hilfe Jungs;)

+0

Also Sie Stellen Sie eine SQL-Frage, beantworten Sie sie (umfassend) und beantworten Sie Ihre eigene Frage mit einer Technologie, die Sie in der Frage nicht genannt oder erwähnt haben. – Fred

Verwandte Themen