SQL进行AES加解密:

MySQL:

自带有加解密模块因此可以直接调用:

--加密
SELECT lower(HEX(AES_ENCRYPT('511901197901010619','personalKey'))) as number;
--解密
SELECT AES_DECRYPT(UNHEX(upper('76c4f945ce742e98bd2a003aa6d3f2f9e9af6e07bbc90f10d117f4b019f01e58')),'personalKey');

PostgreSQL:

本身没有相关函数进行加解密,但在9.6版本后,可以通过安装插件以支持加解密功能

  1. 首先看当前支持的插件列表插件
    select * from pg_available_extensions ORDER BY name desc;
    看看当前插件列表中是否有:pgcrypto插件

  2. 如果有,可以进行安装(需要管理员身份)
    create extension pgcrypto;

  3. 进行加解密调用
    加密:

	SELECT encode(encrypt('511901197901010619', 'personalKey', 'aes-ecb/pad:pkcs'),'HEX');
	--注:
	-- encode()方法代表加密后使用编码方式,推荐HEX或Base64
	-- encrypt代表加密调用,第一个参数代表要加密的数据,第二个代表key即盐值,第三个代表使用的加密方式,这里使用aes加密,ecb/pad:pkcs加密模式

解密:

	SELECT encode(decrypt(decode('76c4f945ce742e98bd2a003aa6d3f2f9e9af6e07bbc90f10d117f4b019f01e58','HEX'), 'personalKey', 'aes-ecb/pad:pkcs'), 'escape');
		--注:
	-- decrypt()方法解密后需要再次以escape格式进行编码(起码笔者这里需要)

递归查询部门下面所有的子部门,并给每个部门进行层级编码

  • 表结构:id, code, parent_code, name.....
  • SQL如下,使用递归查询
	with RECURSIVE tt
	as (
		select t.name, t.code, t.parent_code, 1::INTEGER as lev
		from department_info t where t.code = '4'
		union all
		SELECT d.name, d.code, d.parent_code, tt.lev + 1 as lev
		from department_info d inner join tt on d.parent_code = tt.code
	)
	select * from tt