Excel公式批量拼接SQL
目录
写建表语句或者查询语句,手写SQL难免格式出错,尤其是字段很多的时候。
- 字段去格式
- 拼create字段
- 拼insert字段
- 拼select字段
- Excel函数扩展
写建表语句或者查询语句,手写SQL难免格式出错,尤其是字段很多的时候。
于是面对大批量开发任务时,为了减少手写带来的小错误,一些公司会用自家研发的小工具,协助开发,一般只需要配置相关的表信息与字段信息,就会批量生成建表语句与查询语句。遗憾的是,市场上还没有通用的SQL开发小工具。
实际上在没有这些小工具的时候,我们也可以用Excel来协助我们开发,操作也非常简单。下面提供一些Excel拼接SQL的思路,希望对大家有帮助。
字段去格式
在Excel中复制字段时,可能出现字段前后有空格,一个单元格里拼接多行(实际上需要多行合为一行显示)等问题。
- 用
TRIM()
去除空格 - 用
CLEAN()
去除换行符
拼接内容:
字段 | 清除空格 | 清除格式 |
---|---|---|
NM | =TRIM(A2) |
=CLEAN(B2) |
01_clean sheet页
拼create字段
util.dropTable(RMLDB+'.'+TABLE_NAME)
sql= r'''
CREATE TABLE IF NOT EXISTS $RMLDB$.$TABLE_NAME$(
TB_ID VARCHAR(48) COMMENT '表格编号' -- 02
,NM VARCHAR(75) COMMENT '名称' -- 03
,AMT DECIMAL(24,6) COMMENT '金额' -- 04
,TXN_SRC VARCHAR(12) COMMENT '交易来源' -- 05
)
PARTITIONED BY (
DATA_DT VARCHAR(10) COMMENT '数据日期'
)
COMMENT '基础信息表'
STORED AS PARQUET
'''
util.execSql(sql, locals())
- 用
IF()
判断字段长度是否超长 - 用
REPT()
在字段后拼接空格,将字段与空格看作一整体,使其长度为固定值
拼接内容:
字段 | 字段类型 | 字段中文 | pin字段 | pin字段类型 | pin全部 |
---|---|---|---|---|---|
TB_ID | VARCHAR(48) | 表格编号 | =IF(LEN(A2)<30,A2&REPT(" ",30-LEN(A2)),LEN(A2)) |
=IF(LEN(B2)<25,B2&REPT(" ",25-LEN(B2)),LEN(B2)) |
=" ,"&D2&E2&" COMMENT '"&C2&"'" |
- pin字段
=IF(LEN(A2)<30,A2&REPT(" ",30-LEN(A2)),LEN(A2))
,如果A2中的字段长度小于30,则拼接该字段与空格,保持字段与空格两者作为整体的长度为30,如果字段长度大于等于30,则返回长度值 - pin全部
=" ,"&D2&E2&" COMMENT '"&C2&"'"
将拼好的字段与字段类型,加上字段中文3者合在一起
02_create sheet页
拼接效果
具体运用
拼insert字段
INSERT OVERWRITE $RMLDB$.$TABLE_NAME$
(
TB_ID -- 01 表格编号
,NM -- 02 名称
)
PARTITION(DATA_DT = CAST($bizDate10$ AS VARCHAR(10)))
SELECT
CAST(COALESCE(T1.TB_ID, '') AS VARCHAR(48)) AS TB_ID -- 01 表格编号
,CAST(COALESCE(T1.NM, '') AS VARCHAR(75)) AS NM -- 02 名称
FROM $SHDATADB$.表名 T1
WHERE T1.DATA_DT = '$bizDate10$'
拼接内容:
编号 | 字段 | 字段中文 | 拼"," | 字段对齐pin | pin中文注释 | pin全部 |
---|---|---|---|---|---|---|
01 | NM | 名称 | =","&B2 |
=" "&IF(LEN(D2)<35,D2&REPT(" ",35-LEN(D2)),LEN(D2)) |
="-- "&A2&" "&C2 |
=E2&F2 |
03_insert sheet页
拼接效果
具体运用
拼select字段
INSERT OVERWRITE $RMLDB$.$TABLE_NAME$
(
TB_ID -- 02 表格编号
,NM -- 03 名称
,AMT -- 04 金额
,TXN_SRC -- 05 交易来源
)
PARTITION(DATA_DT = CAST($bizDate10$ AS VARCHAR(10)))
SELECT
CAST(COALESCE(T1.TB_ID_OLD, '') AS VARCHAR(48)) AS TB_ID --02 表格编号
,CAST(COALESCE(T1.NAME_OLD, '') AS VARCHAR(75)) AS NM --03 名称
,CAST(COALESCE(T1.AMT_OLD, 0) AS DECIMAL(24,6)) AS AMT --04 金额
,CAST(COALESCE(T1.TXN_SRC_OLD, '') AS VARCHAR(12)) AS TXN_SRC --05 交易来源
FROM $SHDATADB$.表名 T1
WHERE T1.DATA_DT = '$bizDate10$'
拼接内容:
编号 | 字段类型 | 源表字段 | 目标表字段 | 目标表字段中文 | 拼"," | 字段对齐pin | 字段类型拼")" | 字段类型对齐pin | 目标字段对齐pin | 目标字段中文注释对齐pin | coalesce默认值pin | pin全部 | 固定部分 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
01 | VARCHAR(75) | NM | NM | 名称 | =C2&"," |
=IF(LEN(F2)<35,F2&REPT(" ",35-LEN(F2)),LEN(F2)) |
=B2&")" |
=IF(LEN(H2)<20,H2&REPT(" ",20-LEN(H2)),LEN(H2)) |
=IF(LEN(D2)<30,D2&REPT(" ",30-LEN(D2)),LEN(D2)) |
="--"&A2&" "&E2 |
=IF(OR(ISNUMBER(SEARCH({"CHAR","STRING"},B2))),"'')"," 0)") |
=$N$2&G2&L2&" AS "&I2&"AS "&J2&K2 |
,CAST(COALESCE(T1. |
04_select sheet页
拼接效果
插入语句运用
用到的函数:
SEARCH()
返回查找的字符在字符串中的位置ISNUMBER()
检测参数是否为数值,返回 ture 或 false
Excel函数扩展
ISNUMBER()
具体应用
FIND()
与SEARCH()
作用相同,SEARCH()
是模糊查找,不区分大小写,FIND()
是区分大小写的。
- 判断单元格中是否包含多个指定字符中的某一个,如判断单元格中是否包含“CHAR”、“STRING”、“20”这三个字符中的一个,可用公式
=IF(OR(ISNUMBER(SEARCH({"CHAR";"STRING";"20"},A1))),"有","无")
- 而要判断是否同时包含这三个字符,只要把公式中的OR改成AND即可
=IF(AND(ISNUMBER(SEARCH({"CHAR";"STRING";"20"},A1))),"有","无")
- 判断单元格中是否包含字母A,且不论在字符串的什么位置,也不区分大小写
=IF(COUNTIF(A1,"*A*"),"有","无")
- 判断四个字符中是否以字母A开头
=IF(COUNTIF(A1,"A???"),"有","无")
或者=IF(COUNTIF(A1,"A*"),"有","无")
参考资料:
- 判断字符串中是否具有某些字符
- Excel官网帮助文档