当前位置: 首页 > 面试题库 >

从FROM_UNIXTIME转换负值

扶珂
2023-03-14
问题内容

我一直在试图从我的DB出生的转换日期为日期格式但也有在出生日期字段,当我从网上FROM_UNIXTIME
calclator检查则给出不同的结果,有些负值我面对的问题,如果我有检查FROM_UNIXTIME(-957632400),然后对于负值总是返回NULL。请让我知道如何从UNIX格式(如-957632400)中获取日期格式


问题答案:

我们可以改为:

FROM_UNIXTIME(0) + INTERVAL -957632400 SECOND

FROM_UNIXTIME功能受TIMESTAMP数据类型的允许范围限制,该范围是标准的32位无符号整数范围1970-01-01至2038-01-something。其他软件已更新为支持64位带符号整数,但是MySQL尚未提供该功能(至少在5.1.x中不提供)。

当我们需要更大的范围(例如,1970年1月1日之前的日期)时,MySQL中的解决方法是避免使用TIMESTAMP数据类型,而改用DATETIME数据类型。

我们可以使用该DATE_ADD函数从1970年1月1日减去秒,如下所示:

SELECT DATE_ADD('1970-01-01 00:00:00',INTERVAL -957632400 SECOND)

注意:
在进行这些类型的计算时,您可能需要考虑UTC的时区“偏移”。MySQL会将DATETIME值解释为time_zone当前MySQL会话的设置中指定的值,而不是UTC(time_zone = '+00:00'

跟进:

问: 好的,这意味着如果我们选择低于‘1970-01-01 00:00:00’的日期,那么负值将保存在数据库中,否则它将是正数。对?–软基因

答: 唔,没有。如果选择1970年1月1日之前的date /
datetime值,则MySQL将返回1970年1月1日之前的DATE或DATETIME值。如果存储1970年1月1日之前的DATE或DATETIME值,则MySQL将在1月1日之前存储DATE或DATETIME值。
,1970年,在这些数据类型支持的允许范围内。(类似于0001-01-01至9999吗?)

如果您需要在数据库中存储非常大的正整数和负整数,则可能会将它们存储在定义为的列中BIGINT

DATE列的内部表示形式需要3字节的存储空间,而DATETIME则需要8个字节的存储空间(MySQL版本5.6.4以下。DATE和DATETIME值的内部表示形式和存储在5.6.4中已更改)

所以不,MySQL不会将1970年之前的日期值存储为“负整数”。

如果您考虑一下,MySQL可以自由地实现他们想要的任何存储机制。(并且每个存储引擎都可以随意将其表示序列化到磁盘上,但可以使用它。)

为什么一个日期要3个字节?

MySQL具有的一种选择(我不代表这是完成的方式)可能是将日期分解为年份的年月日组成部分。

范围内的整数值的表示形式-需要-

  • 0 - 9999 - 14位

  • 0 - 12 - 4位

  • 0 - 31 - 5位

总共23位,恰好适合3个字节。这仅表明MySQL不必将1970年1月1日之前的日期值表示为负整数,因此我们不应该假设它确实如此。(但是,如果我们正在为MySQL设计存储引擎,那么我们实际上只关心这一详细级别。)



 类似资料:
  • 试图对这个问题中的各个数字求和。然而,当涉及负数时,函数就会分崩离析。这是因为当您使用toString()时,会将负号转换为NewStr中的值。例如,在本例中,newstr[0]==='-'。不管怎么说都是为了解决这个问题?最好使用Number()函数

  • 我基本上来自微软背景,在SSIS for ETL项目上工作很多。 现在我手头有另一个项目来处理将. csv文件加载到MySql数据库中。在加载这些表的过程中,数据必须经过一些转换,然后进入目标表。这是ETL项目的一部分。 客户端没有SSIS(BIDS)并且被迫使用开源工具。 我做了一些研究,发现Talend数据集成工具最适合我的情况。 由于我是这个环境的新手,而且我确信这方面有专家,所以我需要一些

  • 问题内容: 我怎样才能得到 作为MySQL中的UTC / GMT?该日期在连接的时区中返回。 我不想更改连接的时区。 问题答案: 您最好提前设置时区: 原因是涉及本地时区的转换可能是有损的。这里的文档中有一个示例(请参阅以“注意:”开头的部分下的第4段)

  • 问题内容: 如何在Python中将负数转换为正数?(并保持积极的态度。) 问题答案: 不要忘记检查文档。

  • 可能在Textmate中有你喜欢或者使用过的主题和语法,并且你想要把它们转换到Atom中。如果是这样的话,你很幸运,因为有很多工具可以用来转换它们。 转换 TextMate Bundle TextMate bundle的转换允许你在Atom中使用TextMate的偏好、代码段和配色。 让我们来为R语言转换TextMate bundle。你可以在Github上面找到其它现存的TextMate bun

  • 问题内容: 好的,所以我正在研究一个程序,该程序会摄取图像,将一个像素块隔离到一个数组中,然后为该数组中的每个像素获取每个单独的rgb值。 当我这样做时 它吐出-16106634 我需要从这个int值中获取(R,G,B)值 有公式,算法,方法吗? 问题答案: 该方法始终返回颜色模型中的像素。因此,您只需要为每种颜色隔离正确的位,如下所示: 如果您碰巧需要alpha组件: 另外,您可以使用构造函数以