背景:
有1份 Excel 表内有一字段是中英文混合(前部分中文+后部分英文),现需要拆分中文和英文,并按记录条数插入到数据库中。
关键功能点:
1、一个字符串拆分为中文和英文。
2、去除字符串前后空格。
3、去除换行符。
4、生成MSSQL INSERT 脚本。Excel 的每行数据对应一条插入脚本。
方案一:
1、拆分数据。利用 Excel 拆分公式,分别从混合列获取中文或英文。
拆分公式:
--中文在右,英文在左
英文=LEFT(A2,LEN(A2)*2-LENB(A2))
中文=RIGHT(A2,LENB(A2)-LEN(A2))
--中文在左,英文在右
中文=LEFT(A2,LENB(A2)-LEN(A2))
英文=RIGHT(A2,LEN(A2)*2-LENB(A2))
2、修正数据。利用 TRIM()和CLEAN()公式去除空格和换行符。
3、在 MS 数据库中创建目标数据表。
4、从 Excel 复制需要的列,粘贴到数据表编辑行中,执行SQL。
5、在 MS 数据库,任务->生成脚本->选择具体的数据库对象(目标数据表)->表->高级->常规->要编写脚本的数据的类型->仅限数据->选择文件保存路径->下一步即可生产脚本。
方案二:
1、在 MS 数据库中创建临时数据表。
2、从 Excel 复制需要的列,粘贴到临时数据表编辑行中,执行SQL。
3、利用 MS 标量值函数拆分。用下面脚本创建标量值函数。
3.1.提取数字
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
3.2.提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
3.3.提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-咗]%',@S),1,N'')
RETURN @S
END
GO
4、编写SQL脚本,从临时数据表中查询出数据。
5、根据每行数据编辑成 INSERT 脚本。
6、第5步也可以将数据插入到目标表,然后在 MS 数据库,任务->生成脚本->选择具体的数据库对象->表->高级->常规->要编写脚本的数据的类型->仅限数据->选择文件保存路径->下一步即可生产脚本。
关键功能点:
1、一个字符串拆分为中文和英文。
2、去除字符串前后空格。
3、去除换行符。
4、生成MSSQL INSERT 脚本。Excel 的每行数据对应一条插入脚本。