Tof*_*opo 1 regex sql t-sql sql-server
我正在尝试将邮政编码插入到我的数据库中,但去掉了下划线。我有一个名为 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)
Run Code Online (Sandbox Code Playgroud)
这已经包含了一些条件正则表达式,如果这个字段包含一些文本,它会分别将其转换为 true 或 false。我需要的是一个 condition_regex 去掉这些下划线并用空格替换它,即:'GDB_A45'to 'GDB A45'。我对正则表达式了解不多,所以任何想法都将不胜感激。提前致谢!
SQL Server 没有太多的正则表达式支持,但在这种情况下,我认为您不需要它。你可以做一个简单的替换:
UPDATE mytable
SET mycolumn = REPLACE(mycolumn, '_', ' ')
WHERE mycolumn LIKE '%[_]%'
Run Code Online (Sandbox Code Playgroud)
要在更新时执行此操作,您可以使用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
...
Run Code Online (Sandbox Code Playgroud)
您可以执行一些最大数量的联合,因此您应该使用此方法将插入分成批次。
或者,您可以在目标表上定义一个触发器来为您完成这项工作:
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
Run Code Online (Sandbox Code Playgroud)
...假设您的表有一个名为id的主键。