HeidiSQL声明变量赋值表最大日期时@附近语法错误咨询
HeidiSQL赋值最大日期到变量语法错误解决方案
原错误代码:
DECLARE @maxdate timestampz SET @maxdate = (SELECT MAX("Date") FROM transactions) SELECT maxdate
报错的核心原因是你使用了SQL Server专属的变量声明语法,而HeidiSQL通常对接的MySQL、MariaDB、PostgreSQL等数据库不支持直接在顶级查询中写DECLARE @变量名的语法,不同数据库对应的正确写法如下:
场景1:连接MySQL/MariaDB数据库
MySQL/MariaDB的会话变量无需提前DECLARE声明,直接赋值即可:
-- 给会话变量赋值,字段名Date是关键字,用反引号包裹 SET @maxdate = (SELECT MAX(`Date`) FROM transactions); -- 查看变量值 SELECT @maxdate;
后续查询作为筛选条件的用法:
SELECT * FROM transactions WHERE `Date` = @maxdate;
场景2:连接PostgreSQL数据库
PostgreSQL的会话变量需要通过自定义配置项的方式使用:
-- 赋值自定义会话变量 SET my.maxdate = (SELECT MAX("Date") FROM transactions); -- 读取变量并转换为timestamptz类型 SELECT current_setting('my.maxdate')::timestamptz AS maxdate;
后续查询作为筛选条件的用法:
SELECT * FROM transactions WHERE "Date" = current_setting('my.maxdate')::timestamptz;
注意事项
- 会话变量仅在当前HeidiSQL连接会话内生效,断开重连后变量会失效
- 日期字段名
Date属于SQL关键字,MySQL/MariaDB用反引号`包裹,PostgreSQL用双引号"包裹,符号错误会触发字段不存在的报错
内容的提问来源于stack exchange,提问作者Frederik Grut
相关产品推荐
相关产品推荐

