繁体   English   中英

如何在SQL中使用正则表达式用空格替换下划线

[英]How to replace underscore with a blank space with a regular expression in SQL

我正在尝试将邮政编码插入我的数据库中,但要删除下划线。 我有一个称为FeedDataSetMapping的表,该表用于在插入字段之前映射字段:

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)

它已经包含一些条件正则表达式,如果此字段包含一些文本,则将其分别转换为true或false。 我需要的是condition_regex,它摆脱了这些下划线,并用空格替换它,例如: 'GDB_A45''GDB A45' 我对正则表达式了解不多,所以任何想法都将不胜感激。 提前致谢!

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的主键。

经过一会儿的思考,我得出的结论是,如果在生成XML文件之前在刮取期间(在C#代码中)替换了从刮取数据中得到的下划线,会更容易。 那会避免我很多头痛。 无论如何,谢谢您的帮助;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM