2011-06-13 77 views
0

以及我有一个表帮助与SQL查询

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我不knwo ...但我想选择用户 比完成他的时间需要..我怎么能做到这一点?我可以使用sql进行此查询,并使用循环的for#c#for循环执行... someidea?

回答

1

用几分钟而不是与数字数据类型

您可以轻松地将60

和数字数据更容易查询

1

someidea?

存储数据的类型代表需要存储的数据类型。然后突然你的问题解决了!

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

摘要:你想要在数据库中存储小时数,所以要做到这一点!不要仅仅因为您的应用程序频繁传递字符串而存储字符串。您应该在应用程序的DAL中处理该问题。

1

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

+0

为什么不推荐? – angel 2011-06-13 04:23:06