declare @fail_time datetime,
 @fail_test varchar(30), @ssn varchar(30)
begin  set @ssn='WS04038456'IF exists (select ssn from  testrecord(nolock) where  ssn=@ssn and status='F' and ssn not in (select ssn from repair(nolock)))                    
 begin
DECLARE mtest CURSOR FOR
SELECT Convert(datetime,testdate,121) from testrecord(nolock) where ssn=@ssn
OPEN mtest 
FETCH next FROM mtest into @fail_time
           
  BEGIN
--    select @fail_time=convert(varchar(19),@fail_time,121)  --此句不要即可
    print @fail_time
  END
  CLOSE mfautotest
  DEALLOCATE mfautotest

end
end

解决方案 »

  1.   

    case month(@fail_time) when 1 then ''
    case month(@fail_time) when  2 then ''
      

  2.   

    --你的转换不正确--convert(varchar(19),日期,120),得到的日期格式才是:2003-09-27 09:12:00 declare
    @fail_time datetime,
    @fail_test varchar(30),
    @ssn varchar(30)
    begin 
    set @ssn='WS04038456'
    IF exists (select ssn from testrecord(nolock) where  ssn=@ssn and status='F' and ssn not in (select ssn from repair(nolock)))                    
    begin
    DECLARE mtest CURSOR FOR
    SELECT Convert(datetime,testdate,120) from testrecord(nolock) where ssn=@ssn
    OPEN mtest 
    FETCH next FROM mtest into @fail_time

    BEGIN
    select @fail_time=convert(varchar(19),@fail_time,120) 
    print @fail_time
    END
    CLOSE mfautotest
    DEALLOCATE mfautotest
    end
    end
      

  3.   

    我上面的错了:convert()只是显示的时候有用.并不会修改日期的存储格式对于datetime类型,它的存储格式是固定的.而不是通过convert来修改的.所以,楼主的这句:
    print @fail_time在不同的电脑上执行,显示的结果是不同的.
      

  4.   

    --楼主可以这样调整,来固定显示declare
    @fail_time datetime,
    @fail_test varchar(30),
    @ssn varchar(30)
    begin 
    set @ssn='WS04038456'
    IF exists (select ssn from testrecord(nolock) where  ssn=@ssn and status='F' and ssn not in (select ssn from repair(nolock)))                    
    begin
    DECLARE mtest CURSOR FOR
    SELECT Convert(datetime,testdate,121) from testrecord(nolock) where ssn=@ssn
    OPEN mtest 
    FETCH next FROM mtest into @fail_time
    print convert(varchar(19),@fail_time,120) 
    CLOSE mfautotest
    DEALLOCATE mfautotest
    end
    end
      

  5.   

    如依 zjcxc(邹建) ( ) 信誉:216 
     所说也是可行的,但可能不是我所需要的,我要的是@fail_time这个应该是varchar,而不是datetime,现我已想到了一个办法,就增加了一个函数@testdate,把它定义成datetime,而@fail_time却定义成varchar,这样我修改过的过程如下:declare
    @testdate datetime,
    @fail_time varchar(30),
    @fail_test varchar(30),
    @ssn varchar(30)
    begin 
    set @ssn='WS04038456'
    IF exists (select ssn from testrecord(nolock) where  ssn=@ssn and status='F' and ssn not in (select ssn from repair(nolock)))                    
    begin
    DECLARE mtest CURSOR FOR
    SELECT Convert(datetime,testdate,121) from testrecord(nolock) where ssn=@ssn
    OPEN mtest 
    FETCH next FROM mtest into @testdate
    select @fail_time=convert(varchar(19),@@testdate,120) 
    CLOSE mfautotest
    DEALLOCATE mfautotest
    end
    end
    上面就是我所需要的
    不过我还是要谢谢zjcxc(邹建), txlicenhe(马可) 两位大大