标签: datetime

存储日期时间的首选方式

我们可以通过多种方式存储日期和时间信息。存储 DateTime 信息的最佳方法是什么?

使用 DateTime将日期和时间存储在2 个单独的列一列中

你能解释为什么这种方法更好吗?

(链接到 MySQL 文档以供参考,问题是一般性的,不是特定于 MySQL)
日期和时间类型:日期和时间

database-design datetime

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

哪些日期/时间文字格式是 LANGUAGE 和 DATEFORMAT 安全的?

这是很容易证明,许多日期/时间格式比下面的两个很容易受到由于设置语言,SET DATEFORMAT,或登录的默认语言误解:

yyyyMMdd                 -- unseparated, date only
yyyy-MM-ddThh:mm:ss.fff  -- date dash separated, date/time separated by T 
Run Code Online (Sandbox Code Playgroud)

即使这种没有 T 的格式也可能看起来像一个有效的 ISO 8601 格式,但它在多种语言中都失败了:

DECLARE @d varchar(32) = '2017-03-13 23:22:21.020';

SET LANGUAGE Deutsch;
SELECT CONVERT(datetime, @d);

SET LANGUAGE Français;
SELECT CONVERT(datetime, @d);
Run Code Online (Sandbox Code Playgroud)

结果:

Die Spracheneinstellung wurde auf Deutsch geändert。

Msg 242, Level 16, State 3
Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs。

Le paramètre de langue est passé à Français。 …

sql-server t-sql date-format datetime string-representation

24
推荐指数
1
解决办法
6164
查看次数

为什么我的查询搜索日期时间不匹配?

select * 
from A 
where posted_date >= '2015-07-27 00:00:00.000' 
  and posted_date  <= '2015-07-27 23:59:59.999'
Run Code Online (Sandbox Code Playgroud)

但是结果中包含了今天posted_date 的记录:2015-07-28。我的数据库服务器不在我的国家。问题是什么 ?

sql-server datetime

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

Access (Jet) SQL:表 B 中的日期时间戳位于表 A 中的每个日期时间戳的两侧

第一句话

如果您只是想破解代码,您可以放心地忽略以下(包括)JOINs:Starting Off 部分。的背景结果只是作为背景。如果您想查看代码最初的样子,请查看 2015-10-06 之前的编辑历史记录。


客观的

最终,我想根据表中可用 GPS 数据的日期时间戳计算发射机(XXmit)的内插 GPS 坐标,这些数据SecondTable直接位于表中的观测值的两侧FirstTable

我的近期目标实现的最终目标是要弄清楚如何最好地加入FirstTableSecondTable得到这些侧翼的时间点。稍后我可以使用该信息我可以计算中间 GPS 坐标,假设沿等距柱状坐标系进行线性拟合(花哨的话说我不在乎地球是这个比例的球体)。


问题

  1. 有没有更有效的方法来生成最接近的前后时间戳?
    • 我自己通过抓取“之后”来修复,然后仅获取与“之后”相关的“之前”。
  2. 有没有更直观的方式不涉及(A<>B OR A=B)结构。
    • Byrdzeye提供了基本的替代方案,但是我的“现实世界”经验与他的所有 4 个加入策略的表现都不一致。但是完全归功于他解决了替代连接样式。
  3. 您可能有的任何其他想法、技巧和建议。
    • 到目前为止,byrdzeyePhrancis在这方面都非常有帮助。我发现Phrancis 的建议非常好,并在关键阶段提供了帮助,所以我会在这里给他优势。

对于问题 3,我仍然希望得到任何额外的帮助。 要点反映了我认为在个别问题上对我帮助最大的人。


表定义

半视觉表现

第一表

Fields
  RecTStamp | DateTime  --can contain milliseconds via VBA code (see Ref 1) 
  ReceivID  | LONG
  XmitID    | …
Run Code Online (Sandbox Code Playgroud)

join ms-access aggregate datetime

21
推荐指数
2
解决办法
646
查看次数

MySQL 5.6 DateTime 日期时间值不正确:'2013-08-25T17:00:00+00:00',错误代码为 1292

我正在使用 MySQL 5.6 并且我有一个程序可以对我的数据库运行以下 SQL 语句:

UPDATE `m_table` SET `s_time` = '2013-08-25T17:00:00+00:00' WHERE id = '123' 
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误:日期时间值不正确:第 1 行的“s_time”列的“2013-08-25T17:00:00+00:00”

s_time 的数据类型是 DateTime。

我已经尝试使用工作台设置 allow_invalid_dates 属性。

任何人都可以理解并请向我解释这个错误吗?我知道,如果我手动将语句更改为 UPDATE m_tableSET s_time= '2013-08-25 17:00:00' WHERE id = '123',则该语句有效。

不幸的是,我无法修改提供 SQL 语句的程序(程序的创建者告诉我这是有效的),而且我也无法理解 +00:00 代表什么。

谢谢

mysql datetime

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

使用索引日期时间列的 MySQL 性能问题

我试图解决以下问题大约一个小时,但仍然没有进一步解决。

好的,我有一张桌子(MyISAM):

+---------+-------------+------+-----+-------------------+----------------+
| Field   | Type        | Null | Key | Default           | Extra          |
+---------+-------------+------+-----+-------------------+----------------+
| id      | int(11)     | NO   | PRI | NULL              | auto_increment |
| http    | smallint(3) | YES  | MUL | 200               |                |
| elapsed | float(6,3)  | NO   |     | NULL              |                |
| cached  | tinyint(1)  | YES  |     | NULL              |                |
| ip      | int(11)     | NO   |     | NULL              |                |
| date    | timestamp   | …
Run Code Online (Sandbox Code Playgroud)

mysql myisam performance optimization datetime

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

单独的月份和年份列,或日期与日期始终设置为 1?

我正在用 Postgres 构建一个数据库,其中将有很多由month和分组的东西year,但永远不会由date.

  • 我可以创建整数monthyear列并使用它们。
  • 或者我可以有一month_year列并始终将其设置day为 1。

如果有人正在查看数据,前者似乎更简单更清晰,但后者很好,因为它使用了正确的类型。

postgresql database-design datetime

17
推荐指数
3
解决办法
7932
查看次数

SQL Server Isnull 当字段为空时返回 1900-01-01

当 DOB 字段为空时,以下代码返回 1900-01-01。我想要(并期望)它返回一个空字符串(''),但事实并非如此。我应该如何继续获得我想要的结果?

isnull(convert(date,DOB,1),'')
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 datetime

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

如何使用存储过程为日期范围内的每一天创建一行?

我想创建一个存储过程,它将在给定日期范围内的每一天在表中创建一行。存储过程接受两个输入 - 用户所需日期范围的开始日期和结束日期。

所以,假设我有一张像这样的表:

SELECT Day, Currency
FROM ConversionTable
Run Code Online (Sandbox Code Playgroud)

Day 是一个 DateTime,而 Currency 只是一个整数。

为简单起见,假设我始终希望这些插入的行的 Currency 列都为 1。因此,如果有人输入“2017 年 3 月 5 日”作为开始日期,“2017 年 4 月 11 日”作为结束日期,我希望创建以下行:

2017-03-05 00:00:00, 1
2017-03-06 00:00:00, 1
...
2017-04-11 00:00:00, 1
Run Code Online (Sandbox Code Playgroud)

对存储过程进行编码以执行此操作的最佳方法是什么?我在我的测试环境中使用 SQL Server 2008 R2,但我们的真实环境使用 SQL Server 2012,因此如果 2012 年引入的新功能使此任务更容易,我可以升级我的测试机器。

sql-server stored-procedures t-sql datetime

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

如何向日期时间字符串添加 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万
查看次数