这个sql怎么写(50分)

  • 主题发起人 主题发起人 sqz
  • 开始时间 开始时间
S

sqz

Unregistered / Unconfirmed
GUEST, unregistred user!
有 no,rq,s1,s2等字段 no为编号,rq为时间 s1,s2,s3,s4为字符型表示时间
有数据如下:
1 2002-11-1 7:40 11:30
2 2002-11-1 8:20 11:31
1 2002-11-2 7:56 11:20
2 2002-11-2 7:56 11:31
现要求当s1<'8:00' 做为‘8:00’ 否则取原值
当s2<'11:30'作为‘11:30’否则取原值
求每天s2-s1的值。
 
var
aaa:string;
bbb:string;
begin
aaa:='8:30';
bbb:='8:29';
if bbb<aaa then
showmessage(aaa)
else
showmessage(bbb);
end;
 
你的 s1,s2 是用的字符串表示时间,这样恐怕无法利用到 SQL 的时间处理函数
只能用程序依次取出所有数据进行处理,比较麻烦。如果有可能,修改数据库。

 
ACCESS 可用IIF函数判断。
如:
select iif(s1<'8:30','8:30',s1) from table
如果s1小于8:30,令s1=8:30,否则返回s1原值。
 
同意beta
用datetime类型的字段肯定比你用字符型的来描述来得好,
它在做算术运算也来得快.
 
那s1,s2是datetime怎么处理。sql server 7.0没有iif函数
 
呵呵,SQL SERVER?
SQL SERVER有CASE 语句啊。
 
select no,rq,
s1=case when s1<'08:00' then '08:00' else s1 end,
s2=case when s2<'11:30' then '11:30' else s2 end,
s2_s1=round(((cast(left(s2,2) as int)*60+cast(right(s2,2) as int))-
(cast(left(s1,2) as int)*60+cast(right(s1,2) as int)))/60,2)
from TableName
 
我想说设计这个库结构的人真是个垃圾,这种结构,除了直接打开看看字段直接舒服之外,
没有半点用处。

select 字段1,
字段2,
s1=case when s1<'8:30' then '8:30' else s1 end,
s2=case when s2<'11:30' then '11:30' else s2 end
into #temp from ...
select 字段1,
字段2,
s1=convert(substring(s1,1,charindex(':',s1)-1) as int) * 60 + convert(substring(s1,charindex(':',s1)+1,len(s1)) as int)
s2=convert(substring(s1,1,charindex(':',s1)-1) as int) * 60 + convert(substring(s1,charindex(':',s1)+1,len(s1)) as int)
into #temp2 from #temp1
select 字段1,
字段2,
hour=(s2-s1)/60
min=s2-(s2-s1)/60*60
from #temp2
看看这个思路如何阿,我在winxp下面没有装sql,没有办法试,主要是先将s1和s2分好,
然后转化为分钟数,然后利用整型除法的一个方法来分离出s1和s2差了多少时间
 
多人接受答案了。
 
后退
顶部