如何在SQL中将时间戳(DATE FORMAT)转换为BIGINT

时间:2012-11-20 16:16:49

标签: sql

我需要将时间戳值(格式:2012-11-19 14:29:50.0)转换为BIGINT值(格式:2012111315041650 = YYYYMMDDhhmmss)。我需要在只接受BIGINT的表的列中插入当前时间。

我使用的是Squirrel SQL Client版本3.3.0。我现在使用的查询是

INSERT INTO table1 (BINGINT_DATE, TIMESTAMP_DATE) 
VALUES (2012111315041650, CURRENT_TIMESTAMP); 

我希望将BIGINT_DATECURRENT_TIMESTAMP转换为NOW()值,而不是手动输入BIGINT值,格式为YYYYMMDDHHMISS

这样的东西
INSERT INTO table1 (BINGINT_DATE, TIMESTAMP_DATE) 
VALUES ("CONVERT(CURRENT_TIMESTAMP,BIGINT)", CURRENT_TIMESTAMP); 

让我知道这样做是否可行

请帮我解决这个问题。

由于

7 个答案:

答案 0 :(得分:1)

对于Postgres,您可以使用:

INSERT INTO table1 (BINGINT_DATE, TIMESTAMP_DATE) 
VALUES (to_char(current_timestamp, 'yyyymmddhh24miss')::bigint, CURRENT_TIMESTAMP); 

答案 1 :(得分:1)

要将时间戳记值转换为bigint值(以秒为单位),您可以采用以下方式:

SELECT (EXTRACT(EPOCH FROM TIMESTAMP '2019-04-02T14:56:39.009'))::bigint -- -> 1554216999

要将时间戳值转换为bigint值(以毫秒为单位),您可以按照以下方式进行操作:

SELECT ((EXTRACT(EPOCH FROM TIMESTAMP '2019-04-02T14:56:39.009'))::numeric * 1000)::bigint -- -> 1554216999009

如果要将一列的所有时间戳记值转换为一个表,再转换为同一表的另一列,则可以运行此查询(以毫秒为单位):

UPDATE $table_name$ SET $column_with_values_bigint$ = (EXTRACT(EPOCH FROM $column_with_values_timestamp$)::numeric * 1000)::bigint

希望获得帮助。

答案 2 :(得分:0)

对于Oracle:使用to_charto_number函数,如下所示

    TO_NUMBER(TO_CHAR('2012-11-19 14:29:50.0', 'YYYYMMDDHHMISS'))

对于MySQL:使用DATE_FORMAT& CONVERT如下:

  CONVERT(DATE_FORMAT('2012-11-19 14:29:50.0'', '%Y%M%d%H%i%s'), UNSIGNED BIGINT) 

答案 3 :(得分:0)

以下内容将为您提供(我认为)您所追求的内容:

DECLARE @TM VARCHAR(50) = '2012-11-19 14:29:50.0'


SELECT (CAST(SUBSTRING(@TM,1,4) AS INT) * 10000000000)
     + (CAST(SUBSTRING(@TM,6,2) AS INT) * 100000000)
     + (CAST(SUBSTRING(@TM,9,2) AS INT) * 1000000)
     + (CAST(SUBSTRING(@TM,12,2) AS INT)* 10000)
     + (CAST(SUBSTRING(@TM,15,2) AS INT)* 100)
     + (CAST(SUBSTRING(@TM,18,2) AS INT))

然而,对于其他人提到的整体问题,可能有更好的解决方案,如果你提供更多细节,我们可能会建议一个不那么脏的替代方案。

答案 4 :(得分:0)

你可以在MS SQL上尝试类似的东西:

从bigint到datetime:

select dateadd(s, convert(bigint, '<bigint value like 1477958400000>') / 1000, convert(datetime, '1-1-1970 00:00:00'))

从datetime到bigint:

select cast(datediff(s, convert(datetime, '1-1-1970 00:00:00'), convert(datetime, '<datetime value like 11-01-2016>')) as bigint)* 1000

干杯

答案 5 :(得分:0)

DATETIME到BIGINT;

SELECT CONVERT(BIGINT, FORMAT(CURRENT_TIMESTAMP, 'yyyyMMddHHmmss'))

OR

SELECT CONVERT(BIGINT, FORMAT(GETDATE(), 'yyyyMMddHHmmss'))

BIGINT到DATETIME;

SELECT CONVERT(DATETIME, FORMAT(20191220213340, '####-##-## ##:##:##'))

答案 6 :(得分:-1)

Sql Server;将GETDATE()替换为Column name

SELECT CONVERT(bigint,
       CONVERT(VARCHAR(12) , GETDATE() ,112) +  
       REPLACE(CONVERT(VARCHAR(8) , GETDATE() ,108),':',''))