将负整数转换为 SQL 中的 DATE
Casting negative integer to DATE in SQL
我在使用 Navicat 数据库时遇到问题。我在 SQL 中有一个名为 fechaNacimiento (Birthdate) 的列,它应该是 Date 类型,但它存储为整数(大多数负整数):
SELECT fechaNacimiento FROM Registrados
我得到:
fechaNacimiento
-1451678400
-2082829392
-1798746192
-1199221200
-1356984000
-694299600
-1483214400
-1924976592
-1830368592
-2019670992
-1678909392
239252400
1451617200
-879541200
我不知道这个日期是怎么加载的,我只知道那个负整数里面有一个日期,而且这里没有人知道如何拼写SQL,所以我没有人问.如果我只是将它转换为 DATETIME,我会将它们全部设为 NULL 值。知道如何将此数据转换为日期类型吗?
这样的数字让我想起了 Unix 时代,自 1970 年以来的秒数。如果是这样,您也许可以这样做:
select dateadd(second, <column>, '1970-01-01')
这会将负值放在 1970 年之前的某个时间(例如,-1678909392 是 1916-10-19)。如果您有更早的日期,那么这可能是正在使用的格式。
这些也可以表示为毫秒。如果是:
select dateadd(second, <column>/1000, '1970-01-01')
在这种情况下,-1678909392 代表 1969-12-12。
在 MySQL 中,您将使用:
select '1970-01-01' + interval floor(column / 1000) second
我在使用 Navicat 数据库时遇到问题。我在 SQL 中有一个名为 fechaNacimiento (Birthdate) 的列,它应该是 Date 类型,但它存储为整数(大多数负整数):
SELECT fechaNacimiento FROM Registrados
我得到:
fechaNacimiento
-1451678400
-2082829392
-1798746192
-1199221200
-1356984000
-694299600
-1483214400
-1924976592
-1830368592
-2019670992
-1678909392
239252400
1451617200
-879541200
我不知道这个日期是怎么加载的,我只知道那个负整数里面有一个日期,而且这里没有人知道如何拼写SQL,所以我没有人问.如果我只是将它转换为 DATETIME,我会将它们全部设为 NULL 值。知道如何将此数据转换为日期类型吗?
这样的数字让我想起了 Unix 时代,自 1970 年以来的秒数。如果是这样,您也许可以这样做:
select dateadd(second, <column>, '1970-01-01')
这会将负值放在 1970 年之前的某个时间(例如,-1678909392 是 1916-10-19)。如果您有更早的日期,那么这可能是正在使用的格式。
这些也可以表示为毫秒。如果是:
select dateadd(second, <column>/1000, '1970-01-01')
在这种情况下,-1678909392 代表 1969-12-12。
在 MySQL 中,您将使用:
select '1970-01-01' + interval floor(column / 1000) second