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的所有用户的主要内容,如果未能解决你的问题,请参考以下文章