s_day datetime -->2010/6/14 
s_time varchar(5) -->07:43在使用select s_day+' '+s_time>= or s_day+' '+s_time<= 時,卻報:
char 資料型別轉換成 datetime 資料型別時,產生超出範圍的 datetime 值。
我 print isdate(s_day+' '+s_time) 又都是 1 (true)
有一些日期又不會報錯,有一些日期又會報錯;到底是何原因?

解决方案 »

  1.   

    S_DAY是DATETIME还是VARCHAR?
    如果确定是DATETIME的话这么写试试
    SELECT CAST(CONVERT(VARCHAR(10),S_DAY,120)+' '+S_TIME AS DATETIME)
      

  2.   

    DECLARE @s_day datetime -->2010/6/14  
    declare @s_time varchar(5) -->07:43SET @s_day = '2010/6/14'
    SET @s_time = '07:43'select @s_day+' '+@s_time   --2010-06-14 07:43:00.000
    执行没报错。
    实在不行就convert转一下吧!
      

  3.   

    轉換我也轉過了,但就有會不統一的報錯出現
    convert(varchar(20),@s_day+' '+@s_time,120) -->yyyy/mm/dd HH:mm:ss 
    實際明細檔內有4筆相同日期:
    1   ---> '2010/6/14'  '07:43'
    2   ---> '2010/6/14'  '07:43'
    3   ---> '2010/6/14'  '07:43' 
    4   ---> '2010/6/14'  '07:43'
    在 procedure 內,我使用回全方式過濾值出來;在第一圈都會報錯,第二圈後就通過
    這到底是出在哪邊的問題呢?
      

  4.   

    補充:
    在 procedure 使用 declare cur cursor local for 
    條件:WHERE cm_bar=@cm_bar and ((t_day+' '+t_time>=@t_day+' '+@t_time and t_day+' '+t_time<=@limit_day+' '+@limit_time) or (limit_day+' '+limit_time>=@t_day+' '+@t_time and limit_day+' '+limit_time<=@limit_day+' '+@limit_time))
      

  5.   

    我自己找出原因了
    果然還是出現在日期+時間=組合出現問題;因筆數實在太多了
    運用 isdate 找出,自動將時間錯誤的 歸零 00:00 , 解決報錯問題!!