CREATE FUNCTION dbo.mongoCreated(@_id CHAR(24))
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(
SECOND,
CAST(
CONVERT(
BINARY(4), '0x' + SUBSTRING(@_id, 1, 8), 1
) AS BIGINT
),
CAST('1970-01-01 00:00' AS DATETIME)
)
END
CREATE FUNCTION mongo_timestamp(_id char(24))
RETURNS TIMESTAMP
LANGUAGE plpgsql
AS
$$
BEGIN
RETURN TO_TIMESTAMP(('x' || lpad(LEFT(_id, 8), 8, '0'))::BIT(32)::INT);
END ;
$$
IMMUTABLE
RETURNS NULL ON NULL INPUT;
5条答案
按热度按时间qq24tv8q1#
这可以在MySQL中实现如下(假设
objectId
是一个字符串):它的工作原理如下:
SUBSTR(objectId, 1, 8)
从十六进制objectId
字符串中获取前8个字符CONV(..., 16, 10)
将十六进制数字转换为十进制数字,并将其作为字符串(表示UNIX时间戳)返回CAST (...) AS UNSIGNED
将时间戳字符串转换为无符号整数FROM_UNIXTIME(...)
将时间戳整数转换为日期请注意,默认情况下,显示的日期将基于系统的时区设置。
hgtggwj02#
对于使用SQL Server的用户,将使用以下命令生成类似的结果:
envsm3lx3#
红移
rta7y2nd4#
MSSQL
在Teemu的answer上构建
为了使一些更容易重用,可以像这样将其 Package 到自己的标量函数中
Postgres
改编自another answer to another question
ljo96ir55#
对于上面的答案,我想提供一个关于BigQuery的示例