varchar 列上的 MySQL first_value 返回格式错误的记录

标签 mysql sql window-functions

MySQL 中的first_value 函数以意外格式返回varchar 列。

我有一个包含两列的表“测试”

create table test (col1 varchar(10), col2 integer);

并且有这样的记录,

enter image description here

当我运行first_value函数时,我得到这样的记录

select *, first_value(col1) over(partition by col1 order by col2 desc) as max_col1 
from test;

enter image description here

这是因为first_value仅适用于数字字段吗?

最佳答案

is this because first_value works only for numeric fields?

不,first_value()也适用于 varchar 数据类型。
您得到的结果是正确的,但采用十六进制格式!
0x6B657931key1
0x6B657932key2
0x6B657933key3
因此,这可能是排序问题或您正在使用的软件的问题。
如果您使用的是类似 fiddle 的网站,那么结果按原样出现也就不足为奇了。
无论如何,您可以在这里找到更多信息:https://dev.mysql.com/doc/refman/8.0/en/charset-syntax.html
如果问题仍然存在,您可以随时使用 unhex()功能:

select unhex('6B657931')

将返回:

key1

或者:

select CAST(0x6B657931 AS CHAR)

还将返回:

key1

请参阅demo .

关于varchar 列上的 MySQL first_value 返回格式错误的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421111/

相关文章:

mysql - 在 MYSQL 查询中使用 WHERE 和 ORDER BY 条件时结果非常慢

mysql - 未找到函数 "TO_DATE"; SQL语句: in H2 database and not using TO_CHAR

java - NullPointerException - 使用 Java 执行 SQL

scala - 如何在spark中使用窗口函数过滤数据

mysql sql选择每组中的最后一条记录

sql - postgresql - 如何获得一行的最小值

mysql - SQL UNION ALL 消除重复项

sql - 给定时间/间隔以计算每个分组数据中的开盘价/最高价/最低价/收盘价

sql - SQL 的第二大运行值(value)

python - 在 SQLAlchemy 中优化包含多条记录的 Update 语句