标签: date

如何编码已知日期但未知年份?

我正在使用 Postgres 数据库,并且有一个带有日期时间字段的表。对于许多记录,我们知道年份但不知道日期。有时我们知道日期但不知道年份。其他时候我们知道时间但不知道日期。

使用日期时间数据类型时如何存储部分日期信息?

postgresql best-practices datetime date

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

将 csv 文件复制到 PostgreSQL 表时解析 DATE

我有一长串.csv文件,我想将其导入本地数据库。DATE我相信我的查询是正确的,但解析和列存在一些问题TIMESTAMP。PostgreSQL 读取这些列时需要 ISO 格式“yyyy/mm/dd”,但我的数据采用另一种格式:“dd/mm/yyyy”。

\n

我在网上和其他 Stack Overflow 答案上读到,可以有所SET不同datestyle,但不建议这样做。

\n

有没有办法指定要导入的列的格式?另外,我不需要从 csv 文件导入所有列:我可以省略一些列吗?

\n

细节

\n

首先,我编写了创建表的代码(抱歉,如果列名称是意大利语,但这并不重要):

\n
CREATE TABLE IF NOT EXISTS bikes (\n    bici INT,\n    tipo_bici VARCHAR(20),\n    cliente_anonimizzato INT,\n    data_riferimento_prelievo DATE,\n    data_prelievo TIMESTAMP,\n    numero_stazione_prelievo INT,\n    nome_stazione_prelievo TEXT,\n    slot_prelievo SMALLINT,\n    data_riferimento_restituzione DATE,\n    data_restituzione TIMESTAMP,\n    numero_stazione_restituzione INT,\n    nome_stazione_restituzione TEXT,\n    slot_restituzione SMALLINT,\n    durata VARCHAR(10),\n    distanza_totale REAL,\n    co2_evitata REAL,\n    calorie_consumate REAL,\n    penalit\xc3\xa0 CHAR(2)\n);\n
Run Code Online (Sandbox Code Playgroud)\n

然后我添加查询以将数据复制到表中:

\n
COPY bikes(\n    bici,\n    tipo_bici,\n    cliente_anonimizzato,\n    data_riferimento_prelievo,\n …
Run Code Online (Sandbox Code Playgroud)

postgresql import datetime date csv

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

如何在 MySQL 中找到下一个星期六

我有触发器和一个存储过程(所以 SP 在触发器运行时运行)。我需要一个函数来找到下一个星期六放入 SP。

所以让我们说,今天是星期三(2015-7-22)。如果我的触发器今天运行,其中的 SP 必须找到下一个星期六 (2015-7-25)。

另外,即使是星期六,但时间早于晚上 9.30,它也必须找到当天。晚上 9.30 之后,它必须在下周六返回。

我想把我的整个触发器和 sp 放在这里,但我不想在这里拥挤。我只需要想法,谢谢。

编辑:

感谢 oNaye,我编写了以下代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `newGuess`(
IN `muserID` INT, 
IN `numm1` INT, 
IN `numm2` INT, 
IN `numm3` INT, 
IN `numm4` INT, 
IN `numm5` INT, 
IN `numm6` INT)
    begin
set @today = (select weekday(curdate())+1); /*monday is the first day in here*/
if @today<6 or @today=7 then /*it is NOT saturday*/
    set @nextSaturday = (SELECT DATE_ADD(NOW(),INTERVAL IF(WEEKDAY(NOW())>=5,(6-WEEKDAY(NOW())),(5-WEEKDAY(NOW()))) DAY));
end if;
if @today = 6 then /* …
Run Code Online (Sandbox Code Playgroud)

mysql trigger stored-procedures datetime date

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

在 MySQL 中将 VARCHAR 切换为 DATE

我继承了一个数据库,它有一个真正应该是 DATE 的 VARCHAR 列。没有对表单进行检查(我需要修复它),因此日期不断输入为 2016-12-4 而不是 2016-12-04 等等。

我很确定历史上有很多错误的日期,所以我对将数据类型更改为 DATE 有点怀疑,但我很好奇改变它的好策略是什么?

背景:(我是前端开发人员,不是 DBA,所以虽然我可以在 SQL 中四处走动,但我不知道我不知道的东西,而且我总是害怕我会犯一个错误,这会破坏数据库)。

mysql varchar date

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

在 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
查看次数

日期时间列与日期 + 时间列

我正在为一个保存大量日志的系统设计一个表。我们正在查看每秒大约 200 个条目。

我们使用的是 SQL-Server 2012 企业版。

我有一个关于将一Datetime列分成两列的问题,Date并且Time.

我在问题背后的想法。我会说一旦数据存储在数据库中,大多数搜索将基于每天,给我今天/1 月 10 日的所有结果。

现在我仍然需要存储时间。因此,如果我将其存储为datetime,则在执行此查询时,sql 将不得不加载整个datetime字段,然后只查看一半的数据。

因此,通过可能将日期存储在其自己的字段中,它可以只查看它需要的内容。

但另一方面,如果您确实在查询中指定了时间,则它现在必须检查两列的值。

因此,我希望 SQL Gurus 提供关于哪个选项对大型数据库的查询具有更好的性能的输入。

据我所知datetime,可以高度优化并且是比分解更好的解决方案。

sql-server t-sql sql-server-2012 datetime date

5
推荐指数
1
解决办法
4271
查看次数

SQL Server 2014 现在考虑夏令时?

我的计算机/SQL Server 2014 使用比 UTC 时间晚 5 小时的东部时区。但是当我运行以下代码时,我得到了 4 小时的差异。

CREATE TABLE datetimeoffsetfunction(    
                                    servertime DATETIME2,
                                    utc_servertime DATETIME2,
                                    offset_datetime DATETIMEOFFSET,
                                    switch_offset DATETIMEOFFSET,
                                    to_datetime DATETIMEOFFSET
                                      );

INSERT INTO datetimeoffsetfunction
VALUES (  SYSDATETIME(), 
          SYSUTCDATETIME(), 
          SYSDATETIMEOFFSET(),
          SWITCHOFFSET(  SYSDATETIMEOFFSET(),  '+05:00'),
          TODATETIMEOFFSET( SYSDATETIME(), '+05:00')
          );

The result I got is 

servertime:         2016-07-09 23:59:16.4770556
utc_servertime:     2016-07-10 03:59:16.4770556
offset_datetime:    2016-07-09 23:59:16.4770556 -04:00
switch_offset:      2016-07-10 08:59:16.4770556 +05:00
to_datetime:        2016-07-09 23:59:16.4770556 +05:00
Run Code Online (Sandbox Code Playgroud)

servertime 是我的系统时间,考虑到夏令时,我可以解释为什么 servertime 和 utc_servertime 之间只有四个小时的差异。但我确实希望offset_datetime为 2016-07-09 23:59:16.4770556 -05:00除非 SQL Serve 现在考虑了夏令时。

所以我的问题是现在是否自动考虑夏令时是 SQL Server,至少从 …

sql-server t-sql timezone datetime date

5
推荐指数
1
解决办法
7901
查看次数

获取今天的午夜

我想获得一天的 00:00:00。应该在不使用的情况下完成CONCAT。有哪些选择?

我们可以CURDATE() function在选择查询中使用,但需要像2014-05-05 00:00:00. 如果NOW()会给喜欢2014-05-05 12:05:37

我想CURDATE()在查询中添加默认值 00:00:00 。

mysql date

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

一百万个项目的写作和阅读日期范围

我有一张每天排一排的桌子,可以存放大约一百万个缓慢变化的物品。

查找这些项目Item, Date以查看它们是否存在于表中。对于涉及具有不同日期的许多项目的查找,这有点慢——我的表现在有大约 2.6 亿行。但是,能够快速插入数据以及快速查询数据对我来说很有价值。

我想将其转换为一个表格,该表格通常每个项目有一行,并带有日期范围。(如果日期范围不连续,则一个项目可能有两行。)一个原始导入文件可用于按日期显示每天的项目,与现有架构匹配。每次有新的导入文件可用时,我都会更新现有行的日期范围以涵盖新的导入数据。我还需要能够重新导入文件,以便适当更新信息。在这样的文件中,可能会添加或删除某个项目以前存在的日期。

虽然这有点烦人的任务,但我知道我可以想出正确的MERGE语句来适当地更新数据,但是需要花几个小时的时间来确保我做对了,而且可能不是一个非常快的导入过程。

所以我在玩一种有点不寻常的不同模式设计,想知道是否有人可以评论它 - 好主意,坏主意,如何使用它,性能特征,陷阱等?

当前数据布局示例

Item   Date 
----   ----------
SLAM   2016-11-01
SLAM   2016-11-02
SLAM   2016-11-03
SLAM   2016-11-05
GULP   2016-11-01
GULP   2016-11-02
GULP   2016-11-03
GULP   2016-11-05
Run Code Online (Sandbox Code Playgroud)

请注意,2016-11-04 到目前为止已被跳过,需要尽快加载。

这使得插入和删除数据变得非常容易,但是,数据库增长非常快——这不是最大的表,但已经接近 8 GB,它以每月 1 GB 的速度增长(实际上有两个不同的项目不同分类系统下的代码,因此第二个项目代码的索引将使用的空间增加一倍)。此外,查询花费的时间比我想容忍的要长。

预期的新数据布局

Item   FromDate     ToDateExclusive
----   ----------   ---------------
SLAM   2016-11-01   2016-11-04
SLAM   2016-11-05   2016-11-06
GULP   2016-11-01   2016-11-04
GULP   2016-11-05   2016-11-06
Run Code Online (Sandbox Code Playgroud)

虽然这对于空间使用和查询非常有用,但是当 2016-11-04 的新导入文件同时包含SLAMGULP时,合并过程必须确定新日期是否连续连接到两个现有日期范围,然后更新一行以包含整个范围并删除另一行。这很棘手。

如果稍后缺少 2016-11-04 的新导入文件,则GULP必须再次将单行拆分为两行,就像上面一样。这种情况很少见,但也并非不可能,尤其是考虑到文件可能会乱序导入——它们只能按需获取——并且对多个历史文件进行更正可能会产生这种情况。

不寻常的想法数据布局

Item   DateBitPattern (varbinary) …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 merge date

5
推荐指数
1
解决办法
244
查看次数

从 Unix 日期获取年份 DATEPART

在我的数据库中,日期保留为自 1970 年 1 月 1 日起/之前经过的天数,我认为这是一种 Unix 日期格式,例如。今天是 2018 年 5 月 23 日,值为 17674。

我正在尝试select针对日期表中的列运行语句以仅显示年份。

如果我运行这个:

datepart(year, c.cko_date)
Run Code Online (Sandbox Code Playgroud)

我得到的日期是 1940 年代(应该是最近几年)。

当我跑

select datepart(year, getdate()) 
Run Code Online (Sandbox Code Playgroud)

它正确地告诉我日期是 2018 年。

关于我做错了什么的任何建议?

sql-server-2008 sql-server date-format format date

5
推荐指数
1
解决办法
739
查看次数