我在excel文件中有这样的数据。作为示例,我仅在此处发布2条记录作为示例,总共有10000条这样的记录。
1) 8984 Beachwood Rd Wasaga Beach ON L9Z 2X8 Phone: (705) 422-1000 Fax: (705) 422-1006
2)Bronte Health Centre 78 Jones Street Oakville ON L6L 6C5 Phone: (905) 827-9865
Fax: (905) 827-3583
这些字符串在PRIMARY PRACTICE LOC
列下的单个单元格中。现在,我只想从这些记录中提取传真号码。手动执行不是一种选择,因为有很多方法。我了解SQL的基础知识,因此,如果有人可以帮助我提出一个查询,该查询只能从这些记录中提取传真号码,然后将其放在新的列中,将有助于我进一步开展我的项目,因为我被困在这里。我在线搜索并找到了SQL的子字符串和拆分字符串函数,但对如何在此处使用它们一无所知。关于如何解决此问题的任何指导都将是很好的。
答案 0 :(得分:1)
说明: 我使用CHARINDEX查找单词Fax在行中的位置,然后使用SUBSTRING函数从charindex函数(第二个参数)返回的值中提取行中的所有内容(第一个参数到子字符串) )到最后,使用字符串的长度作为最后一个参数
create table yourtable ([PRIMARY PRACTICE LOC] nvarchar(max));
insert into yourtable values
('8984 Beachwood Rd Wasaga Beach ON L9Z 2X8 Phone: (705) 422-1000 Fax: (705) 422-1006'),
('Bronte Health Centre 78 Jones Street Oakville ON L6L 6C5 Phone: (905) 827-9865 Fax: (905) 827-3583');
select
Fax=
CASE
WHEN CHARINDEX('Fax',[PRIMARY PRACTICE LOC])=0 THEN NULL -- case added when no Fax word in string
ELSE SUBSTRING([PRIMARY PRACTICE LOC],CHARINDEX('Fax',[PRIMARY PRACTICE LOC]),LEN([PRIMARY PRACTICE LOC]))
END
from yourtable
答案 1 :(得分:0)
如果您要格式化该表python可以完成这项工作,建议您使用像python这样的简单编程语言来完成这项任务
[8984 Beachwood Rd Wasaga Beach ON L9Z 2X8, Phone: (705) 422-1000,Fax: (705) 422-1006 ]
我还发现以下链接很有用:
https://www.extendoffice.com/documents/excel/3639-excel-extract-part-of-string.html
答案 2 :(得分:0)
您也可以使用正确的功能执行此操作,假设传真始终是该列中的最后一个值,
declare @table table(
[PRIMARY PRACTICE LOC] varchar(max))
insert into @table
values('8984 Beachwood Rd Wasaga Beach ON L9Z 2X8 Phone: (705) 422-1000 Fax: (705) 422-1006'),('Bronte Health Centre 78 Jones Street Oakville ON L6L 6C5 Phone: (905) 827-9865
Fax: (905) 827-3583')
SELECT
RIGHT([PRIMARY PRACTICE LOC],len([PRIMARY PRACTICE LOC])-CHARINDEX('Fax',[PRIMARY PRACTICE LOC])-3) as Fax
from @table
答案 3 :(得分:0)
您可以使用index.js,SUBSTRING和PATINDEX功能来查找传真号码的起始位置(即搜索Fax:
模式),并在传真之后找到空格数字并复制它们之间的子字符串。
select *, SUBSTRING(data.row, fax.idx + 5, IIF(SpaceAfter.idx < 1, 20, SpaceAfter.idx - 1))
from (values
('8984 Beachwood Rd Wasaga Beach ON L9Z 2X8 Phone: (705) 422-1000 Fax: (705) 422-1006 '),
('Bronte Health Centre 78 Jones Street Oakville ON L6L 6C5 Phone: (905) 827-9865 Fax: (905) 827-3583')) data(row)
cross apply (select PATINDEX('%Fax: %', data.row) as idx) fax
cross apply (select CHARINDEX(' ', data.row, fax.idx + 15) as idx) SpaceAfter
第一个叉号将在Fax:
的文本处找到。我们将在此索引之后开始复制5个字符。第二个叉号在传真号码后找到空格。如果没有空格,IIF函数将复制,告诉SUBSTRING复制下一个20个符号。
当然,您可以添加其他验证,例如根本没有Fax:
文本:
IIF(fax.idx = 0, null, SUBSTRING(data.row, fax.idx + 5, IIF(SpaceAfter.idx < 1, 20, SpaceAfter.idx - 1)))
答案 4 :(得分:-1)