标签: datetime

如何向日期时间字符串添加 1 毫秒?

基于选择,我可以像这样返回 x 行:

1   2019-07-23 10:14:04.000
1   2019-07-23 10:14:11.000
2   2019-07-23 10:45:32.000
1   2019-07-23 10:45:33.000
Run Code Online (Sandbox Code Playgroud)

我们所有的毫秒都是 0。

有没有办法将 1 x 1 毫秒加起来,所以选择看起来像这样:

1   2019-07-23 10:14:04.001
1   2019-07-23 10:14:11.002
2   2019-07-23 10:45:32.003
1   2019-07-23 10:45:33.004
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个游标甚至一个没有成功的更新。

这是获得我想要的结果的查询:

  select top 10 ModifiedOn 
    from [SCHEMA].[dbo].[TABLE]
  where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Run Code Online (Sandbox Code Playgroud)

有 81k 个值。该字段是DATETIME

sql-server-2008 sql-server varchar datetime

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

处理数据集市/仓库中的时区

我们开始设计数据集市/仓库的构建块,我们需要能够支持所有时区(我们的客户来自世界各地)。从在线(和书籍)阅读讨论来看,一个常见的解决方案似乎是在事实表中具有单独的日期和时间维度以及时间戳。

但是,我很难回答的问题是,考虑到我的动态时区要求,日期和时间维度实际上对我有什么好处?时间维度更有意义,但我很难处理日期维度。日期维度的一般设计方法通常包括日期名称、星期几、月份名称等属性。我遇到的所有问题是 UTC 时间 2013 年 12 月 31 日星期二晚上 11:00 是星期三, 2014 年 1 月 1 日,在 UTC+2 之后的所有时区。

因此,如果我必须对每个查询(和报告)进行所有这些时区转换,那么拥有和存储这些我可能永远不会使用(似乎)的属性有什么意义?有些人建议为每个时区设置事实行,但这对我来说似乎很荒谬。我们需要能够每月存储数百万条记录。

其他人建议有一个时区桥接表,虽然有一定的意义,但它似乎也需要额外的复杂性和额外的连接来完成我的客户端应用程序和报告应该能够轻松地从日期中找出的东西(报告将主要基于网络那里有无数的库可以帮助转换、显示和格式化日期)。

我唯一能想到的是按日期和小时分组的简便性和可能的​​性能,但是按日期部分分组的做法有多糟糕(我们正在使用 MS SQL,但我们将查询数百万行),或者我们应该考虑只是非常简单的日期和时间维度,大多数情况下不超过小时、日、月和年数字,因为大多数文字(例如星期一)在时区发挥作用时没有多大意义?

data-warehouse sql-server-2012 timezone datetime

14
推荐指数
1
解决办法
7428
查看次数

如何在 PostgreSQL 中生成日期序列?

如果您想生成时间序列,请参阅此问题

假设我想在两个日期之间生成一系列日期。我看到该功能generate_series仅提供

Function                                    Argument Type                         Return Type                                                               Description
generate_series(start, stop, step interval) timestamp or timestamp with time zone setof timestamp or setof timestamp with time zone (same as argument type) Generate a series of values, from start to stop with a step size of step
Run Code Online (Sandbox Code Playgroud)

那么我该怎么做呢?

postgresql timestamp timezone datetime date

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

将日期时间列转换为秒数

在我的 SQL Server 数据库中,我有一datetime列。

创建代表列long值的新列的好方法是什么datetime?在long将表示了若干秒。

我想如果我可以将它转换为longs,那么在一段时间内按查询分组会更容易,因为我可以将长数除以固定数量。

该表是静态的,不会更新或删除数据。

sql-server-2008 sql-server t-sql type-conversion datetime

11
推荐指数
2
解决办法
8万
查看次数

在同一个查询 INSERT 中,两个 VALUES 是 NOW() 是否可以返回不同的时间?

我遇到了类似的查询

INSERT INTO mytable (id, Created, Updated) VALUES (null, NOW(), NOW())
Run Code Online (Sandbox Code Playgroud)

有列定义

| Created   | datetime |
| Updated   | datetime |
Run Code Online (Sandbox Code Playgroud)

在这种情况下,MySQL 是否会将 NOW() 值设置为当前时间并向两个调用返回相同的值,或者该查询是否会运行(不太可能)风险,即 Created 和 Updated 的时间略有不同?

注意:我无法更改字段类型。

mysql query datetime mariadb-10.2

11
推荐指数
2
解决办法
2430
查看次数

选择两个日期之间的 COUNT 天(周末除外)

我试图获得两个不同日期之间的天数,周末除外。

我不知道如何达到这个结果。

postgresql datetime

10
推荐指数
2
解决办法
4万
查看次数

同一列中日期的总和间隔

您如何最好地总结交错行之间同一列中一系列日期的差异?我有一个日期时间列,想计算行之间的差异。我想要秒的差异。这个问题不是关于如何获得 2 个时间戳之间的差异,而是更侧重于如何最有效地在同一个表的行之间进行计算。在我的情况下,每一行都有一个日期时间事件类型,它在逻辑上将两行链接在一起。

详细说明如何对开始和结束的事件类型进行分组。(Andriy M 的问题)开始和结束“应该”是连续的。如果开始没有后续结束,则应将其排除在总和之外。移动到下一个开始,看看它是否有结束。只有连续的开始 - 结束对应该添加到总秒数的总和中。

在 postgresql 9.x 中工作...

表中的示例数据;

eventtype, eventdate
START, 2015-01-01 14:00
END, 2015-01-01 14:25
START, 2015-01-01 14:30
END, 2015-01-01 14:43
START, 2015-01-01 14:45
END, 2015-01-01 14:49
START, 2015-01-01 14:52
END, 2015-01-01 14:55
Run Code Online (Sandbox Code Playgroud)

请注意,所有开始日期和结束日期都是连续的。

这是我的第一次尝试。似乎正在工作。

SELECT 
-- starts.*
SUM(EXTRACT(EPOCH FROM (eventdate_next - eventdate))) AS duration_seconds
FROM
( 
    WITH x AS (
        SELECT *, dense_rank() OVER (ORDER BY eventdate) AS rnk
        FROM   table
        AND eventdate > '2015-01-01 00:00:00.00'
        AND eventdate < '2016-01-01 23:59:59.59' 
        )
    SELECT …
Run Code Online (Sandbox Code Playgroud)

postgresql datetime sum

10
推荐指数
1
解决办法
4165
查看次数

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

我正在尝试运行一个简单的查询来获取在 11 月创建的所有行:

SELECT COUNT(*)
FROM dbo.profile 
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000' 
AND '2014-11-30 23:59:59.997';
Run Code Online (Sandbox Code Playgroud)

SMSS 返回:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

我不明白为什么当“创建”设置为日期时间时数据从 varchar 转换为日期时间:

列 我需要告诉服务器“创建”是日期时间吗?如果没有,为什么我会收到此 varchar 消息?

编辑:数据库中的值为YYYY-MM-DD. 下面来自@SqlZim 的回复说我需要使用 convert() 来告诉 sql 数据库中的日期格式 - 并用字母 T 替换空格字符:

select count(*) 
from dbo.profile 
where [created] between convert(datetime,'2014-11-01T00:00:00.000') 
and convert(datetime,'2014-11-30T23:59:59.997');`
Run Code Online (Sandbox Code Playgroud)

sql-server type-conversion datetime

9
推荐指数
3
解决办法
18万
查看次数

存储数百万行非标准化数据或一些 SQL 魔法?

我的 DBA 经验只是简单的存储 + CMS 样式数据的检索 - 所以这可能是一个愚蠢的问题,我不知道!

我有一个问题,我需要查找或计算特定组大小和特定时间段内特定天数的假期价格。例如:

1 月任何时候 2 人 4 晚的酒店房间多少钱?

例如,我有 5000 家酒店的定价和可用性数据,如下所示:

Hotel ID | Date | Spaces | Price PP
-----------------------------------
     123 | Jan1 | 5      | 100
     123 | Jan2 | 7      | 100
     123 | Jan3 | 5      | 100
     123 | Jan4 | 3      | 100
     123 | Jan5 | 5      | 100
     123 | Jan6 | 7      | 110
     456 | Jan1 | 5      | 120
     456 | Jan2 …
Run Code Online (Sandbox Code Playgroud)

postgresql window-functions datetime denormalization

8
推荐指数
1
解决办法
769
查看次数

无法查询模式绑定视图的基础表

我使用备份还原技术和一组传输后操作(如DBCC UPDATEUSAGE或)将数据库从 SQL Server 2008R2 迁移到 SQL Server 2019(均为企业版)UPDATE STATISTICS XXX

在统计更新时,我收到以下错误:

Msg 402, Level 16, State 1, Procedure ZZZZ, Line 5 [Batch Start Line 0]
The data types datetime and time are incompatible in the add operator.
Msg 4413, Level 16, State 1, Line 1
Could not use view or function 'ZZZZ' because of binding errors.
Run Code Online (Sandbox Code Playgroud)

我知道该消息非常明确(在 2008R2 上语法正确的视图在 2019 年不再适用)。我不明白为什么定义的视图WITH SCHEMABINDING无效会阻止更新基础表上的统计信息。

此外,在使用WHERE子句查询基础表时,我收到相同的错误消息,除非我使用以下提示强制执行 FULLSCAN:

OPTION(TABLE HINT( $mytable, FORCESCAN ))
Run Code Online (Sandbox Code Playgroud)

我知道如果 DDL …

sql-server statistics materialized-view upgrade datetime

8
推荐指数
1
解决办法
311
查看次数