如何在MySQL单条SELECT语句中使用列值调用函数?
解决MariaDB中字符串拼接生成SHA2哈希并对比的问题
问题分析
你原有的SQL语句存在两个关键错误:
- MariaDB中字符串拼接不能使用
+运算符,需用CONCAT()函数实现 - 你将列名
salt2用单引号包裹成了字符串常量,导致无法引用表中的实际列值
正确的单条SELECT语句
直接用CONCAT()拼接固定字符串与salt2列值,传入SHA2()生成哈希,同时与priv_aes列做对比:
SELECT salt2, SHA2(CONCAT('A11111111111111111111', salt2), 512) AS generated_hash, priv_aes, -- 直接生成对比结果,方便VB.NET快速判断 CASE WHEN SHA2(CONCAT('A11111111111111111111', salt2), 512) = priv_aes THEN 1 ELSE 0 END AS has_full_permission FROM usertable;
适配VB.NET的精简写法
如果仅需判断是否存在拥有全部权限的用户,可使用EXISTS查询减少返回数据量:
SELECT EXISTS( SELECT 1 FROM usertable WHERE SHA2(CONCAT('A11111111111111111111', salt2), 512) = priv_aes ) AS has_full_permission_user;
在VB.NET中执行该查询后,只需读取返回的has_full_permission_user值(1表示存在,0表示不存在)即可完成判断。
补充处理逻辑
若salt2列可能存在NULL值,需用COALESCE()避免拼接结果为NULL:
SHA2(CONCAT('A11111111111111111111', COALESCE(salt2, '')), 512)
内容的提问来源于stack exchange,提问作者Scott Downey
相关产品推荐
相关产品推荐

