首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果变量存储为varchar,是否可以将其识别为int、float或time

如果变量存储为varchar,是否可以将其识别为int、float或time
EN

Stack Overflow用户
提问于 2012-05-08 01:50:02
回答 3查看 154关注 0票数 1

我需要存储在mysql字段中的分数,但这个分数可以是时间,整数或浮点数。我这样做的第一个方法是识别分数类型,然后将其输入到三个字段中的一个字段中,但是如果需要添加新的分数类型,我不希望必须不断地向数据库添加字段。我记得后来有人告诉我,如果你把一些值存储为varchar,那么它将不能被读取为整型,浮点型,甚至是日期。我的问题是,我是否可以将这三个类型都存储为一个特定的类型,但在从数据库中获取它并在我的php代码中使用它时,可以以任何我需要的方式读取它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-08 16:09:54

在我看来,您可以将该字段建模为FLOAT,除非您绝对需要了解存储的变量类型。通过转换为时间戳,可以将时间转换为整数值。整数实际上是实数(浮点数)集的一个子集,所以我猜这样就涵盖了所有内容。浮点运算可能会导致一些精度和相等性测试的问题,所以要小心!

票数 1
EN

Stack Overflow用户

发布于 2012-05-08 03:46:46

可以使用CAST and CONVERT函数将字符串数据类型转换为另一种MySQL数据类型,如INT、FLOAT、DECIMAL、DATE、DATETIME等。

有几个问题。如何知道行中存储的是什么数据类型?MySQL确实支持RegExp,但我不建议在WHERE子句中使用它。将数据类型存储在另一列中。

此外,在查询的where子句中使用cast函数会使它们的运行速度变慢。如果您需要按数据进行搜索/排序,则应该使用适当的数据类型。也许您应该为每种数据类型添加一列;对于每一行,只填充相应的列。

票数 1
EN

Stack Overflow用户

发布于 2012-05-08 02:19:30

如果您对文本执行数学运算,mysql将非常乐意地将文本转换为适当类型的数字。但是,它还会将非数字文本转换为零,并对其执行相同的操作,因此您需要检查是否事先只拉取了适当类型的字段。

This forum post展示了如何将正则表达式条件添加到查询中,以确保只提取其中包含数值数据的字段。但是,我认为更明智的做法是使用单独的列来指示每个记录的分数类型,并使用它来检索适当的分数。

我不知道如何将文本转换为日期(通过date()不起作用)。但是,请注意,mysql日期格式(2012-05-08 11:20:23)中的日期元素按重要性降序排列。如果您只想查找最高/最低日期,或者按日期排序,那么将它们作为字符串处理就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10486672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档