使用时间数据类型(我使用的是 Microsoft SQL Server 2008),有没有办法只取出它的分钟部分?我试图将时间传递给 datepart 和 datediff 函数,但都拒绝工作。
示例:我想从 04:15 得到 15
我正在使用的数据库/表将其所有日期值保存为日期时间(没有时区)。
如何找出该日期所在的时区?
例如,中欧夏令时 (+02) 从 2015 年 3 月 29 日开始,而之前的冬季时间 (+01) 从 2014 年 10 月 26 日开始。
假设我看到的日期是2014-11-06,是否有一个函数可以用来检查它属于哪个时区?
注意,我知道时区变化时会有一些边缘情况
如果需要的话,我对一些大的CASE WHEN语句感到满意,但当然更愿意使用一些系统函数。
我有触发器和一个存储过程(所以 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) 我有一个关于将DATEADD()函数用于标识为的列的问题CHAR (6)
该time_stamp列包含类似131329as 的值hhmmss。每当我尝试创建一个新列来保存列的值time_stamp+ 5 分钟时,我都会收到错误消息。
消息 242,级别 16,状态 3,第 1 行
字符数据类型到日期时间数据类型的转换导致日期时间值超出范围。`
我想要做的是创建一个新列,它比time_stamp. 我现在正在处理一份显示“已完成订单”的报告,但我需要该报告将订单显示为“未完成”至少 5 分钟,然后才能在报告中显示为“已完成”。
我想 在 SQL Server 2008 R2 上使用T-SQL BULK INSERT插入带有可选日期时间值(每行)的行。
一张表可能如下所示:
CREATE TABLE [dbo].[tbl_bulk_insert_datetime_issue] (
[id] [int] NOT NULL,
[description] [varchar](20) NOT NULL,
[datetime] [datetime] NULL,
CONSTRAINT [pk_bulk_insert_datetime_issue] PRIMARY KEY CLUSTERED (
[id] ASC
))
Run Code Online (Sandbox Code Playgroud)
插入批次:
BULK
INSERT [dbo].[tbl_bulk_insert_datetime_issue]
FROM 'C:\temp\bulkinsertsample.csv'
WITH
(
FIELDTERMINATOR=';'
)
Run Code Online (Sandbox Code Playgroud)
如果我要插入以下 CSV 内容:
1;row01;
2;row02;20130401
3;row03;
4;row04;20130515
Run Code Online (Sandbox Code Playgroud)
表的内容已按预期解析和插入:
id description datetime
----------- -------------------- -----------------------
1 row01 NULL
2 row02 2013-04-01 00:00:00.000
3 row03 NULL
4 row04 2013-05-15 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
1;row01;
2;row02;20130401
3;row03;not_a_datetime …Run Code Online (Sandbox Code Playgroud) 我正在为一个保存大量日志的系统设计一个表。我们正在查看每秒大约 200 个条目。
我们使用的是 SQL-Server 2012 企业版。
我有一个关于将一Datetime列分成两列的问题,Date并且Time.
我在问题背后的想法。我会说一旦数据存储在数据库中,大多数搜索将基于每天,给我今天/1 月 10 日的所有结果。
现在我仍然需要存储时间。因此,如果我将其存储为datetime,则在执行此查询时,sql 将不得不加载整个datetime字段,然后只查看一半的数据。
因此,通过可能将日期存储在其自己的字段中,它可以只查看它需要的内容。
但另一方面,如果您确实在查询中指定了时间,则它现在必须检查两列的值。
因此,我希望 SQL Gurus 提供关于哪个选项对大型数据库的查询具有更好的性能的输入。
据我所知datetime,可以高度优化并且是比分解更好的解决方案。
对于学校项目,我们试图根据 5 个传感器(3x O3、1x 温度、1x 湿度)的组合来计算(校正)臭氧值。
我们在项目的其余部分使用 MySQL 和 PHP。
该表Measurements具有以下结构:
id (int(11))
time (datetime)
value (float)
measured_value (float)
sensor (tinytext)
unit (tinytext)
measurement_short_type (tinytext)
stream_id int(11)
Run Code Online (Sandbox Code Playgroud)
所以一个示例行看起来像这样:
ID Time value measured_value sensor unit measurement_short_type stream_id
---- ------------------- ----- -------------- ------ ----- ---------------------- ---------
3324 2016-05-21 11:00:34 0 193 O3r KOhms O3 6511
Run Code Online (Sandbox Code Playgroud)
如您所见,我们有 2 列,value(float) 和measured_value(float)。
为了value根据单个传感器数据(存储在 中measured_value)计算正确的最终数据,我们需要对每个数据点应用与此类似的公式:
Corrected value[datetime] = ("6511".measured_value[datetime] * -0.106830613)
+ ("6512".measured_value[datetime] * 0.065201457)
+ …Run Code Online (Sandbox Code Playgroud) 例子:
INTERVAL '5 minute',则所需输出为 2018-05-17 22:50:00。INTERVAL '10 minute',则所需输出为 2018-05-17 22:50:00。INTERVAL '1 hour',则所需的输出为 2018-05-17 23:00:00。INTERVAL '1 day',那么期望的输出是 2018-05-18 00:00:00。我的第一个问题在这里,但我查看了许多其他地方并找不到我的问题的答案。
id | track_seg_id | time
----+--------------+---------------------
1 | 0 | 2020-05-23 07:45:32
2 | 0 | 2020-05-23 07:46:04
3 | 0 | 2020-05-23 07:46:53
4 | 0 | 2020-05-23 07:46:58
5 | 0 | 2020-05-23 07:47:03
6 | 0 | 2020-05-23 07:47:08
7 | 0 | 2020-05-23 07:47:11
8 | 0 | 2020-05-23 07:47:16
9 | 0 | 2020-05-23 07:47:20
10 | 0 | 2020-05-23 07:47:23
Run Code Online (Sandbox Code Playgroud)
我想要做的是progressive sum从第一行到下一行获得几秒钟。
id | track_seg_id | time | prog
----+--------------+---------------------+---------------------
1 …Run Code Online (Sandbox Code Playgroud) 我经常遇到以下问题。我有两张间隔表。它们受日期限制(没有时间部分)。每个表中的间隔不重叠。
| 开始时间 | 结束时间 |
|---|---|
| 2015-01-03 | 2015-03-02 |
| 2015-03-05 | 2015-04-01 |
| 开始时间 | 结束时间 |
|---|---|
| 2015-01-07 | 2015-02-27 |
| 2015-03-01 | 2015-03-13 |
| 2016-01-01 | 2016-01-02 |
我想找到两个表的集合差异,即代表第一个表中而不是第二个表中的时间的间隔。
上面的虚拟示例所需的输出:
| 开始时间 | 结束时间 |
|---|---|
| 2015-01-03 | 2015-01-06 |
| 2015-02-28 | 2015-02-28 |
| 2015-03-14 | 2015-04-01 |
即,如果第一个表的日期在下面用黄色标记,并且第二个表的范围用框包围,我将寻找未装箱的黄色日期的连续范围。
我目前将两端都视为包含间隔,并使用 DateTime 作为时间戳。我当前的方法是通过三重自连接(恶心)获取第二个表的补集,然后通过连接将结果与第一个表相交。不好玩。
有更好的方法吗?
datetime ×10
sql-server ×5
t-sql ×4
date ×2
interval ×2
postgresql ×2
aggregate ×1
bulk-insert ×1
date-math ×1
mysql ×1
mysql-5.5 ×1
trigger ×1