我将数字保存为字符串,因为它们通常大于 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 实例。
您可能还需要考虑更适合时间戳的数据类型,例如 TIMESTAMP
或 DATETIME
,一旦它们被转换为您需要的格式,它们就可能被转换为您需要的格式。在数据库之外。
关于mysql - 从将数字保存为字符串的列中获取最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548306/