mysql - 从将数字保存为字符串的列中获取最小值

标签 mysql casting

我将数字保存为字符串,因为它们通常大于 MySQL 允许的整数最大限制。

我试图获取的是此列中的最小值和最大值,但仅作为字符串进行比较会返回非常不同的结果。

我尝试在查询中添加 CONVERT 子句,如下所示:

"SELECT end_timestamp FROM ".$db_table_prefix."user_events ORDER BY CONVERT('end_timestamp', SIGNED INTEGER) DESC LIMIT 1"

但是结果不正确。我认为 CONVERT 子句没有按照我期望的方式转换为整数。

那么将字符串转换为整数并获取最小值的最佳方法是什么?

最佳答案

我没有可供测试的 MySQL 实例,但看起来有一个解决方法可以解决您的问题。我不知道这里的问题是数字太大而无法转换,但是如果它们不能是数据库中的整数,为什么可以将它们转换为数据库外的整数?

尝试这样的事情:

"SELECT end_timestamp FROM ".$db_table_prefix."user_events ORDER BY CHAR_LENGTH(end_timestamp) DESC, end_timestamp DESC LIMIT 1"

这将首先按字符数排序,这是对数字进行字符串排序的地方(只要没有任何前导零),然后对相同长度的数字进行数字排序。如果仍然不起作用,您可能需要“SELECT CHAR_LENGTH(end_timestamp) AS ts_len”来计算排序命令之外的值。这就是我真的不知道哪个会起作用的地方,因为我没有可用于测试的 MySQL 实例。

您可能还需要考虑更适合时间戳的数据类型,例如 TIMESTAMPDATETIME,一旦它们被转换为您需要的格式,它们就可能被转换为您需要的格式。在数据库之外。

关于mysql - 从将数字保存为字符串的列中获取最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548306/

相关文章:

php - Mysql( Doctrine )正在重复计数结果,可能是由于分组依据,但无法弄清楚

mysql 检索字段名称作为记录集的一部分

c++ - 从基类指针获取对两个具有不同类型的派生成员变量的访问。

c++ - 为带参数的函数转换 boost::array<float, 12> (const float (&arr)[12])

python - 解构类型提示

php - 数据库错误 : cannot use database mydatabase MySQL Error: 0 ()Session halted

PHP、Mysql插入

PHP 请求 : worker fails with "MySQL server has gone away"

python - 将 ctypes 字节数组转换为 float 的 Python 列表

xcode - 将 JSON AnyObject 转换为 Double (Swift)