sql语句关于时间与时间戳

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句关于时间与时间戳相关的知识,希望对你有一定的参考价值。

蓝色抹黑的是表的列名,但是里面数据的可是是2014-11-17,没办法和时间戳对比,请问怎么修改才能让另个数据进行对比

$dqtime = date(\'Y-m-d\',time());

这种方法将当前时间转换为指定时间格式,然后可以比较两个时间大小

追问

两个时间可以用>比较大小吗

追答

mysql 中是可以的,它会当做两个字符串作比较,其他数据库你试下

追问

好像不行哦,用了qqrwtjrwsj>\'$dqtime\',所有数据全被修改了,不管时间有没有大于当前时间的

追答

分别输出下qqrwtjrwsj的值和$dqtime的值看下

参考技术A 你可以把 $dqtime中存储的数据转换成 2014-11-17格式的字符,然后进行比较。

或者把 数据库中的字段转换成日期时间,进行比较(这个要看具体的数据库系统,转换方法不一样)

用于每行唯一时间戳的 Oracle Sql 语句

【中文标题】用于每行唯一时间戳的 Oracle Sql 语句【英文标题】:Oracle Sql Statement for unique timestamp for each row 【发布时间】:2014-08-21 13:43:43 【问题描述】:

我们在 Oracle DBMS(由遗留应用程序使用)上有下表,其中时间戳是键的一部分(我知道会有更好的方法...)

TABLE ITEM_HISTORY (
 ITEM_ID number,
 MY_TIMESTAMP TIMESTAMP(7),
 ... 
 PRIMARY KEY (ITEM_ID, MY_TIMESTAMP));

只有 ITEM_ID 和 MY_TIMESTAMP 的组合是唯一的。在正在运行的系统上 我们现在需要保证,每个时间戳都是唯一的,因为我们必须 对损坏的数据进行了一些更正,并且对于给定的数据,我们违反了唯一键约束。 通过简单的 MY_TIMESTAMP = SYSTEMTIMESTAMP 更新,所有行 将具有相同的时间戳。

如何使用 SQL 更新我的表,以便每一行都有唯一的时间戳?

更新/说明:

由于我们客户的数据已损坏,我只能尝试尽可能好地更正这些项目。 在某些情况下,损坏表中的项目(具有不同的 ITEM_ID)将被更正 到具有相同 ITEM_ID 的相同项目。要进行此更新,我必须在此之前保证 时间戳不同。

【问题讨论】:

一些想法。 1 - 如果在完全相同的时间插入 2 行会怎样(我知道它们会相隔几毫秒)但是如果时间戳不是那么精确呢? 2 - 您必须重新加载/插入所有数据。没有办法处理表中已经存在的记录。 3 - 您可以构建任何其他类型的唯一标识符吗?可能是auto-increment?我来自 sql 领域,对 Oracle 不是很熟悉。 您能说明一下您使用的是哪个 DBMS 吗?是 SQL 还是 Oracle? 为唯一键添加一个序列。你为什么要为此使用时间戳呢?您冒着未来数据违反约束的风险。 什么是 TABLE_ID?能改变吗?为什么不专注于此? 我同意 cmets 的观点,即桌子设计得不好。我无法改变这一点。该表在客户处有效,但他们遇到了问题,因为他们导入了无效数据。通过更正我面临的问题的数据,许多时间戳具有完全相同的值。我遇到了问题。 【参考方案1】:

以下UPDATE 语句将通过将毫秒数增加rownum 值来保证每一行都有一个唯一的MY_TIMESTAMP 值。

编辑在 Alessandro Rossi 指出可能存在重复值后,已修改以下查询以使用 SYSTIMESTAMP 进行更新。

  UPDATE ITEM_HISTORY 
  SET my_timestamp = SYSTIMESTAMP + NUMTODSINTERVAL(rownum/1000, 'SECOND');

但是,建议您使用替代策略,例如添加另一列来存储键值。

【讨论】:

根本不是一个好的答案!!!!这怎么能行?两个副本都将增加 1 毫秒。它们仍然是重复的,不同之处现在有错误的值!! @AlessandroRossi 您是否尝试运行一些测试?每行的 rownum 将是唯一的,因此即使是相同的 MY_TIMESTAMP 值的增量也会不同。 无论如何:如果第 1 行的值为 0.002,第 2 行的值在 UPDATE 后为 0.001,则它们是重复的,如果表在第 100000000 行有 100000000 行,则该值完全失控。希望清楚这个更新是完全避免的:它可以改变重要的值(想象一下在蒙特卡洛的 Formula1 单圈时间)并且它可以创建新的重复 @AlessandroRossi 我想你可能有一点。我将更改查询以使用 SYSTIMESTAMP。感谢您指出。 我认为时间戳不应该改变,因为它是有意义的。它不应该是主键的一部分,唯一性的焦点应该转移到其他方向。 OP还应该解释为什么他只专注于时间戳列!

以上是关于sql语句关于时间与时间戳的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache IoTDB 时,插入 SQL 语句的第一列是不是需要时间或时间戳?

用于每行唯一时间戳的 Oracle Sql 语句

java sql - 将时间戳插入sql数据库

在MySQL数据库里面,怎么使用SQL语句查询功能把时间戳格式格式化为日期格式如:2013-02-28 6:00:00 ?

一条sql 语句查询用户表,返回每天的用户量和时间,表里面的时间是时间戳的格式

sql怎么生成某一个时段内的随机时间戳