sql查询:选择timeMade超过hoursNeeded的所有用户

Posted

技术标签:

【中文标题】sql查询:选择timeMade超过hoursNeeded的所有用户【英文标题】:sql query: select all users where timeMade was more than hoursNeeded 【发布时间】:2011-06-13 04:09:21 【问题描述】:

我有一张桌子

create table usersnew
(
user1 varchar (50) primary key,
names varchar(50),
lastname varchar(50),
hoursneeded float)

create table hoursusers
(
user1 varchar(50),
timeMade varchar(50),
foreign key (user1) references usersnew(user1)
)

hoursneede 是用户完成服务所需的时间。“社会服务” 可以是400小时。。 现在 timeMade 是他的时间.. 它是 varchar,因为我将某些内容保存为“30:00:00” 现在是 30 小时 '23:30:00' 是 23 小时 30 分钟 所以..我用时间跨度和其他东西在C#中转换它.. 现在我需要查询哪里 我选择 timeMade 超过 Hoursneede 的所有用户... 如果他需要赚 400 并且他已经赚了 '400:00:00' 或者加上我会选择他.. 但并非所有用户都需要同时进行.. 其他用户需要制作 450 或 300 我不知道...但我想选择用户 比他需要的时间已经完成了..我该怎么做?我可以对这个查询使用 sql 并且 c# with loops-for, for do it...有什么想法吗?

【问题讨论】:

【参考方案1】:

使用分钟代替,数字数据类型

您可以通过除以 60 轻松地将分钟转换为小时

数字数据更容易查询

【讨论】:

【参考方案2】:

有什么想法?

使用表示需要存储的数据类型的类型存储数据。然后一下子解决了你的问题!

Using the TIME data type in SQL Server 2008;失败: 您可以尝试将数据存储为FLOAT(您在另一个表中执行此操作);虽然如果您开始需要每秒粒度,它会变得很丑: 如果您需要每秒粒度,请尝试将秒数存储在 INT 列中。

总结:你想在数据库中存储小时数,那就这样做吧!不要仅仅因为你的应用程序频繁地传递它就存储一个字符串。您应该在应用程序的 DAL 中处理它。

【讨论】:

【参考方案3】:

您不应该像 varchar 那样存储以获得更好的输出。让我们使用您的逻辑将它们存储为某种数字或日期格式。 例如。您可以使用日期时间字段进行比较。您也可以为此编写一些存储过程,但不建议使用 .NET 代码中的循环或条件来检索。

【讨论】:

以上是关于sql查询:选择timeMade超过hoursNeeded的所有用户的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 查询优化

使用 Union All 优化 SQL 查询

SQL Server如何编辑超过前200行的数据

sql中带有无效标识符错误的子查询

如果运行超过 x 秒,SQL 查询返回一个值?

mysql慢查询和php-fpm慢日志