我需要将时间戳值(格式: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_DATE
或CURRENT_TIMESTAMP
转换为NOW()
值,而不是手动输入BIGINT
值,格式为YYYYMMDDHHMISS
像
这样的东西INSERT INTO table1 (BINGINT_DATE, TIMESTAMP_DATE)
VALUES ("CONVERT(CURRENT_TIMESTAMP,BIGINT)", CURRENT_TIMESTAMP);
让我知道这样做是否可行
请帮我解决这个问题。
由于
答案 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_char
和to_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),':',''))