我们可以通过多种方式存储日期和时间信息。存储 DateTime 信息的最佳方法是什么?
使用 DateTime将日期和时间存储在2 个单独的列或一列中?
你能解释为什么这种方法更好吗?
(链接到 MySQL 文档以供参考,问题是一般性的,不是特定于 MySQL)
日期和时间类型:日期和时间
这是很容易证明,许多日期/时间格式等比下面的两个很容易受到由于设置语言,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。 …
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。我的数据库服务器不在我的国家。问题是什么 ?
如果您只是想破解代码,您可以放心地忽略以下(包括)JOINs:Starting Off 部分。的背景和结果只是作为背景。如果您想查看代码最初的样子,请查看 2015-10-06 之前的编辑历史记录。
最终,我想根据表中可用 GPS 数据的日期时间戳计算发射机(X或Xmit)的内插 GPS 坐标,这些数据SecondTable直接位于表中的观测值的两侧FirstTable。
我的近期目标实现的最终目标是要弄清楚如何最好地加入FirstTable到SecondTable得到这些侧翼的时间点。稍后我可以使用该信息我可以计算中间 GPS 坐标,假设沿等距柱状坐标系进行线性拟合(花哨的话说我不在乎地球是这个比例的球体)。
(A<>B OR A=B)结构。
对于问题 3,我仍然希望得到任何额外的帮助。 要点反映了我认为在个别问题上对我帮助最大的人。
第一表
Fields
RecTStamp | DateTime --can contain milliseconds via VBA code (see Ref 1)
ReceivID | LONG
XmitID | …Run Code Online (Sandbox Code Playgroud) 我正在使用 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 代表什么。
谢谢
我试图解决以下问题大约一个小时,但仍然没有进一步解决。
好的,我有一张桌子(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) 我正在用 Postgres 构建一个数据库,其中将有很多由month和分组的东西year,但永远不会由date.
month和year列并使用它们。month_year列并始终将其设置day为 1。如果有人正在查看数据,前者似乎更简单更清晰,但后者很好,因为它使用了正确的类型。
当 DOB 字段为空时,以下代码返回 1900-01-01。我想要(并期望)它返回一个空字符串(''),但事实并非如此。我应该如何继续获得我想要的结果?
isnull(convert(date,DOB,1),'')
Run Code Online (Sandbox Code Playgroud) 我想创建一个存储过程,它将在给定日期范围内的每一天在表中创建一行。存储过程接受两个输入 - 用户所需日期范围的开始日期和结束日期。
所以,假设我有一张像这样的表:
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 年引入的新功能使此任务更容易,我可以升级我的测试机器。
基于选择,我可以像这样返回 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。
datetime ×10
sql-server ×5
mysql ×2
t-sql ×2
aggregate ×1
date-format ×1
join ×1
ms-access ×1
myisam ×1
optimization ×1
performance ×1
postgresql ×1
varchar ×1