标签: timestamp

在视图中将 Unix 时间戳转换为 DATETIME

我有一个存储 unix 时间戳的表。要将其作为日期查询,我正在尝试将此时间戳转换为视图中的日期时间类型。不幸的是,我似乎只能取出 DATE 部分。

此链接描述了如何进行转换,但需要更改nls_date_format以包含时间部分。默认当前仅显示日期部分。我需要日期和时间。

不幸的是,该解决方案仅适用于会话级别。作为开发人员,我宁愿不必跑到我们的托管服务提供商那里要求他们更改数据库级别的值 - 特别是因为它可能会影响其他应用程序。

有没有一种方法可以在不修改系统的情况下将 sql 中的时间戳转换为日期时间?

oracle oracle-11g timestamp date-format

7
推荐指数
2
解决办法
9万
查看次数

在 MySQL 中将列类型 DATETIME 更改为 TIMESTAMP 时会发生什么?

我想在超过一百万行的表中将列数据类型从 DATETIME 转换为 TIMESTAMP。

是否可以?慢吗?我会丢失旧信息还是 MySQL 可以自动转换?我可以做一个alter table还是我可以做一些不同的事情?

mysql timestamp datetime

7
推荐指数
1
解决办法
1万
查看次数

如何从 2 个时间戳列中获得以分钟为单位的差异?

似乎无法弄清楚这一点。只需要 2 个 oracle 时间戳列之间的分钟差。

END_TS                                  START_TS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
11-NOV-13 01.52.14.000000 PM                            11-NOV-13 01.51.14.000000 PM
11-NOV-13 02.20.47.000000 PM                            11-NOV-13 02.19.47.000000 PM
18-NOV-13 12.44.54.000000 PM                            18-NOV-13 12.34.02.000000 PM
22-NOV-13 12.02.09.000000 AM                            22-NOV-13 12.02.08.000000 AM
Run Code Online (Sandbox Code Playgroud)

oracle timestamp

7
推荐指数
2
解决办法
12万
查看次数

具有 AT TIME ZONE 和 UTC 偏移量的奇数

我不明白这两列之间的区别。美国/芝加哥时区是 UTC-6,所以我希望两者都返回相同的结果:

select timezone('America/Chicago', '2017-01-01 12:00:00'::TIMESTAMP AT TIME ZONE 'UTC'),
       timezone('UTC-6'          , '2017-01-01 12:00:00'::TIMESTAMP AT TIME ZONE 'UTC');
Run Code Online (Sandbox Code Playgroud)

然而,结果是:

2017-01-01 06:00:00 | 2017-01-01 18:00:00
Run Code Online (Sandbox Code Playgroud)

而且,这种行为非常尴尬,

SELECT '1:00 -1'::time with time zone AT TIME ZONE '-1'; 
  timezone   
-------------
 03:00:00+01
Run Code Online (Sandbox Code Playgroud)

谁能解释一下?

postgresql timestamp utc-time timezone

7
推荐指数
1
解决办法
3050
查看次数

在某些情况下,遵循 thomas 写入规则的时间戳协议是否允许不可视图序列化的计划?

我在教科书(Avi Silberschatz、Henry F. Korth 和 S. Sudarshan $6e$ 的《数据库系统概念教科书》)中遇到了以下行。686:

Thomas 的写入规则允许不可冲突序列化但仍然正确的调度。那些允许的非冲突可序列化调度满足视图可序列化调度的定义(参见示例框)。

我从上面几行中了解到,遵循 Thomas 的写入规则的时间戳协议生成的每个时间表都是视图可序列化的。

现在让我们采用以下小时间表:$S:R_1(X)、W_2(X)、W_1(X)$。

这个时间表 $S$ 在时间戳协议下是允许的,该协议遵循 Thomas 的写入规则。

并且序列化顺序是 $R_1(X), W_1(X).$

但我无法证明它是视图可序列化的。

其实我认为它是非视图可序列化的,因为,

  1. 考虑串行顺序为 $T_1, T_2$

    现在 $X$ 的最终值由 $T_2$ 写入。所以不等价。

  2. 下一个替代序列是 $T_2, T_1$

    在这里,$R_1(X)$ 将读取由 $T_1$ 写入的 $X$ 的值,而不是在两个事务开始之前存在的原始值。所以这也不是视图等价的。

这里出了什么问题?请帮我解决这个问题。

concurrency timestamp serialization protocol

7
推荐指数
1
解决办法
268
查看次数

如何对 DML 语句的 RETURNING 子句返回的行进行排序?

我正在使用此语句以升序获取按时间戳排序的所有行

DELETE FROM @tableName
        WHERE id = ANY (
            SELECT id
            FROM @tableName
            WHERE source = :p1 AND target = :p2 @readCondition
            ORDER BY createddate
            LIMIT @limit
            FOR UPDATE SKIP LOCKED
        )
        RETURNING *;
Run Code Online (Sandbox Code Playgroud)

我得到了这些结果:

"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.230886"

"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.279604"

"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.276191"
"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.202338"
Run Code Online (Sandbox Code Playgroud)

如您所见,它们没有按 排序createdate。有没有办法对子RETURNING句中的行进行排序?

postgresql timestamp

7
推荐指数
1
解决办法
124
查看次数

为什么即使我没有指定任何内容,mysql 也会在插入/更新时添加默认时间戳?

我有一张表,如下所示:

CREATE TABLE SomeTable (  
    id int unsigned NOT NULL AUTO_INCREMENT,  
    status enum('broken','repaired') NOT NULL,  
    from datetime NOT NULL,  
    until datetime NOT NULL,  
    brought_in timestamp,  
    brought_by varchar(255) NOT NULL,  
    repair_status enum('unpayed', 'payed') DEFAULT NULL,  
    payed_when timestamp,    
    delivered_when timestamp,  
    primary key(id)    
);  
Run Code Online (Sandbox Code Playgroud)

当我创建表时,如果我做了SHOW CREATE TABLE然后我看到列brought_in被定义为具有当前时间戳ON INSERTON UPDATE.
但是我没有在我的创建表中添加这样的指令。
为什么它不像其他列那样让它为空?
现在,在每次插入或更新另一列时,它都会添加当前时间戳。我不想要那个。
它不会对其他列执行此操作。我究竟做错了什么?

mysql timestamp

6
推荐指数
1
解决办法
2万
查看次数

Postgresql 将没有时区的时间戳更新为有时区

当我创建表时,创建了一个没有时区的时间戳列。所有导入的时间都在UTC. 现在我想明确添加时区信息,并且我已经更改了该列

ALTER TABLE review ALTER COLUMN review_time TYPE TIMESTAMP WITH TIME ZONE USING review_time AT TIME ZONE 'UTC';
Run Code Online (Sandbox Code Playgroud)

选择现有数据不显示添加的时区信息

review_time
2017-07-28 02:25:44
2017-07-28 03:10:35
2017-07-28 03:11:32
2017-07-28 03:11:35
2017-07-28 03:11:38
2017-07-28 03:11:41
2017-07-28 18:54:54
Run Code Online (Sandbox Code Playgroud)

我是否需要UPDATE对现有数据运行语句?如果需要,语法是什么?

更新1

缺少时区信息的输出是由于应用程序本身 (SQLWorkbenchJ) 造成的。查询 frompsql将显示时区

mydb # SELECT review_time FROM review;
      review_time       
------------------------
 2017-08-20 08:00:02+08
 2017-07-27 00:45:33+08
 2017-07-27 00:45:37+08
 2017-07-28 02:24:03+08
 2017-07-28 02:24:27+08
 2017-07-28 02:24:31+08
 2017-07-28 02:25:31+08
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp datetime

6
推荐指数
1
解决办法
4万
查看次数

在 Postgres 中将 Unix 时间戳转换为 SQL 时间戳

Date.now()我已经将和其他普通 Unix 时间戳值的结果传递1534360109480到 SQL 中,并通过以下方式运行它们:

"@converted_date" = to_timestamp("@date") AT TIME ZONE 'UTC';

而且它始终如一地返回50591-11-28 22:32:38

我不明白年份怎么可能是 50591,并且无论如何,日期/时间都不准确。

我究竟做错了什么?

postgresql timestamp datetime date

6
推荐指数
1
解决办法
9164
查看次数

为什么只有当create语句中存在两个或多个时间戳字段时,mysql才会抛出“字段的默认值无效”?

在 mysql 5.7.28 中我创建了一个像这样的表:

create table t1 (
id int not null,
d1 timestamp) 
engine=innodb;
Run Code Online (Sandbox Code Playgroud)

工作正常并创建d1为, 。non-nulldefault value current_timetampon update current_timestamp

但是当我尝试创建具有两个时间戳字段的相同表时,如下所示:

create table t1 (
id int not null,
d1 timestamp,
d2 timestamp) 
engine=innodb;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

SQL 错误 (1067):“d2”的默认值无效

为什么只有在添加第二个时间戳字段时才会出现错误?
这是 mysql 中的错误还是某些预期行为?

mysql timestamp default-value mysql-5.7

6
推荐指数
1
解决办法
4080
查看次数