[英]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.