【问题标题】:sql query: select all users where timeMade was more than hoursNeededsql查询:选择timeMade超过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...有什么想法吗?

【问题讨论】:

    标签: c# sql sql-server


    【解决方案1】:

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

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

    数字数据更容易查询

    【讨论】:

      【解决方案2】:

      有什么想法?

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-24
          • 1970-01-01
          • 2020-06-06
          相关资源
          最近更新 更多