查询

Case 搜索函数

通过 sql 查询出来的结果不一定需要满足我们的需要,可能还需要在导出 Excel 后再次修改,这里希望减少这样的工作,尽可能实现导出来的数据不需要二次修改。

首先是希望对查询出来的结果起别名,这里需要用到Case搜索函数

首先是使用范围,Case 搜索函数用在 SELECTFROM之间

使用的格式

CASE WHEN 字段名 1 = “字段值” THEN “别名 1”

WHEN 字段名 = “字段值” THEN “别名 2”

ELSE ‘别名 3’ END

下面是一段实际的 sql,其中 moneyTypechangeType 皆为 int 类型

1
2
3
4
5
6
SELECT
( CASE WHEN a.moneyType = 1 THEN "个人余额" WHEN a.moneyType = 2 THEN "礼品卡余额" END ) "资金类型",
( CASE WHEN a.changeType = 1 THEN "充值" ELSE "扣款" END ) "变动类型",
ROUND( a.money / 100, 2 ) "金额"
FROM
`moneyopelog` AS a

结果如下

和没有使用Case搜索函数的进行对比

ROUND 函数

按照指定的小数位数进行四舍五入运算,上面的

1
ROUND( a.money / 100, 2 ) "金额"

就是对金额除以 100 后保留两位小数

导出

如果是在 Windows 下,可以直接通过 Navicat 导出,如果是在 Linux 下,不能连接外网时,则需要通过命令来实现了

用到的命令

-D 指定的数据库

-e 指定的 sql 语句

1
mysql -uroot -p123456 -D core -e "select * from user" > user.xlsx

Linux 下字符编码默认为 UTF-8,如出现乱码可设置为 GBK,命令为

1
iconv -f utf8 -t gb2312 user.xlsx -o result.xlsx

解释:将 utf8 编码格式的 user.xlsx 文件转换为 gb2312 编码格式的文件,并输出为 result.xlsx

扩展

iconv 命令是 Linux 系统自带的用于转换文件编码的命令行工具。

语法格式:iconv [参数]

常用参数:

参数解释
-f输入编码
-t输出编码
-o指定输出文件
-c忽略不可转换的字符
-l列出支持的编码