sqlserver 添加一条数据就在这条数据末尾储存当前时间 不知道怎么写这个触发器。 请大家帮帮忙!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 添加一条数据就在这条数据末尾储存当前时间 不知道怎么写这个触发器。 请大家帮帮忙!相关的知识,希望对你有一定的参考价值。
sqlserver 添加一条数据就在这条数据末尾储存当前时间 不知道怎么写这个触发器。
请大家帮帮忙!
我这么写的 但是我试着添加了一条数据 触发器不能执行 说什么益处错误!
CREATE TRIGGER IndentTime ON Indent
FOR Insert AS
BEGIN
UPDATE Indent set 订餐时间 = (SELECT CONVERT(VARCHAR(30),GETDATE(),0))
FROM Inserted
WHERE Inserted.IID = Indent.IID
END;
表结构
CREATE TABLE Indent
(
IID int IDENTITY primary key,
联系人 varchar(50),
电话 int,
地址 varchar(200),
订餐时间 smalldatetime,
)
把Verchar(30)改为smalldatetime类型试试看吧。 参考技术B CREATE TRIGGER IndentTime ON Indent
FOR Insert AS
BEGIN
UPDATE Indent set 订餐时间 = CONVERT(VARCHAR(30),GETDATE(),120)
WHERE exists(select 1 from inserted where inserted.IID =Indent.IID )
END本回答被提问者采纳 参考技术C 干嘛还要写触发器,直接给一个默认值就完了啊,在说了触发器是很影响效率的 参考技术D 额。。你为什么不直接给字段添加默认值呢,你的时间格式不对
字段为smalldatetime转换也改是一样的 convert(smalldatetime,GETDATE()) 第5个回答 2012-08-24 不明白为什么要用触发器,
可以用的方法多的是吧,
字段黙认值、写入的时候自动给值等,都一样可以实现呀
如果数据丢失,平均每小时添加一条空记录
【中文标题】如果数据丢失,平均每小时添加一条空记录【英文标题】:Average per hour adding an empty record if data is missing 【发布时间】:2021-11-15 22:57:06 【问题描述】:我有这些数据:
temp_humid
+---------+------+-------+---------------------+
| source | temp | humid | stamp |
+---------+------+-------+---------------------+
| cuisine | 10.0 | 70.0 | 2019-07-21 20:21:56 |
| chambre | 20.0 | 80.0 | 2019-07-21 20:23:43 |
| cuisine | 11.0 | 71.0 | 2019-07-21 20:01:56 |
| chambre | 21.0 | 81.0 | 2019-07-21 20:04:11 |
| chambre | 20.0 | 72.0 | 2019-07-21 21:09:11 |
| cuisine | 30.0 | 92.0 | 2019-07-21 21:11:56 |
| cuisine | 22.0 | 72.0 | 2019-07-21 21:01:56 |
| chambre | 34.0 | 94.0 | 2019-07-21 21:04:12 |
| chambre | 20.0 | 72.0 | 2019-07-21 23:09:11 |
| cuisine | 30.0 | 92.0 | 2019-07-21 23:11:56 |
| cuisine | 22.0 | 72.0 | 2019-07-21 23:01:56 |
| chambre | 34.0 | 94.0 | 2019-07-21 23:04:12 |
+---------+------+-------+---------------------+
我需要将每小时的平均值存储在第二张表中。 不知道如果一个小时没有数据,我是否也可以插入一个NULL记录,也许在第二次处理中。
temp_humid_total
+----+--------------+---------------+--------------+---------------+---------------------+
| id | cuisine_temp | cuisine_humid | chambre_temp | chambre_humid | stamp |
+----+--------------+---------------+--------------+---------------+---------------------+
| 1 | 10.5 | 70.5 | 20.5 | 80.5 | 2019-07-21 20:00:00 |
| 2 | 26.0 | 82 | 27.0 | 83 | 2019-07-21 21:00:00 |
| 3 | NULL | NULL | NULL | NULL | 2019-07-21 22:00:00 |
| 4 | 26.0 | 82 | 27.0 | 83 | 2019-07-21 23:00:00 |
+----+--------------+---------------+--------------+---------------+---------------------+
我尝试过第一次治疗,但做不到。
INSERT INTO temp_humid_total(cuisine_temp, cuisine_humid, chambre_temp, chambre_humid, stamp) VALUES
(
(SELECT AVG(temp), AVG(humid)
FROM temp_humid
WHERE source="cuisine"
GROUP BY YEAR(stamp), MONTH(stamp), DAY(stamp), HOUR(stamp)
),
(SELECT AVG(temp), AVG(humid), stamp
FROM temp_humid
WHERE source="chambre"
GROUP BY YEAR(stamp), MONTH(stamp), DAY(stamp), HOUR(stamp)
)
);
我收到一条错误消息,但不知道它是哪个操作数。
ERROR 1241 (21000): Operand should contain 1 column(s)
创建数据集:
CREATE TABLE `temp_humid` (
`source` enum('chambre','cuisine') NOT NULL,
`temp` decimal(3,1) NOT NULL,
`humid` decimal(4,1) NOT NULL,
`stamp` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `temp_humid` (`source`, `temp`, `humid`, `stamp`) VALUES
('cuisine', '10.0', '70.0', '2019-07-21 20:21:56'),
('chambre', '20.0', '80.0', '2019-07-21 20:23:43'),
('cuisine', '11.0', '71.0', '2019-07-21 20:01:56'),
('chambre', '21.0', '81.0', '2019-07-21 20:04:11'),
('chambre', '20.0', '72.0', '2019-07-21 21:09:11'),
('cuisine', '30.0', '92.0', '2019-07-21 21:11:56'),
('cuisine', '22.0', '72.0', '2019-07-21 21:01:56'),
('chambre', '34.0', '94.0', '2019-07-21 21:04:12'),
('cuisine', '20.0', '72.0', '2019-07-21 23:09:11'),
('chambre', '30.0', '92.0', '2019-07-21 23:11:56'),
('cuisine', '22.0', '72.0', '2019-07-21 23:01:56'),
('chambre', '34.0', '94.0', '2019-07-21 23:04:12');
CREATE TABLE `temp_humid_total` (
`id` int(11) NOT NULL,
`cuisine_temp` decimal(3,1) DEFAULT NULL,
`cuisine_humid` decimal(4,1) DEFAULT NULL,
`chambre_temp` decimal(3,1) DEFAULT NULL,
`chambre_humid` decimal(4,1) DEFAULT NULL,
`stamp` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `temp_humid_total`
ADD PRIMARY KEY (`id`);
ALTER TABLE `temp_humid_total`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
【问题讨论】:
尝试删除其中两个选择查询周围的brackets ()
@groovy_guy ERROR 1064 (42000): 你的 SQL 语法有错误
INSERT INTO temp_humid_total(cuisine_temp, cuisine_humid) SELECT AVG(temp), AVG(humid) FROM temp_humid WHERE source="cuisine" GROUP BY YEAR(stamp), MONTH(stamp), DAY(stamp), HOUR(stamp)
这应该可以,但是添加两个选择查询我不确定它是否有效
谢谢,它可以工作,但缺少房间和时间。两个 SELECT:( 的语法错误
这是什么关系型数据库?我猜 MySQL 是因为 enum
类型,但澄清会帮助人们帮助你。
【参考方案1】:
这看起来像条件聚合:
select date_format(stamp, '%Y-%m-%d %H') as yyyymmddhh,
avg(case when source = 'cuisine' then temp end) as cuisine_temp,
avg(case when source = 'cuisine' then temp end) as cuisine_humid,
avg(case when source = 'chambre' then temp end) as chambre_temp,
avg(case when source = 'chambre' then temp end) as chambre_humid
from temp_humid
group by yyyymmdd;
【讨论】:
我将做第二个过程来添加一个空行。谢谢:) 对我来说也有新的东西,谢谢@GordonLinoff以上是关于sqlserver 添加一条数据就在这条数据末尾储存当前时间 不知道怎么写这个触发器。 请大家帮帮忙!的主要内容,如果未能解决你的问题,请参考以下文章