a.入库日期 between  ''+@StartDate+''   and   ''2010-8-1''  
错误原因在这句上,我给@startDate赋值为 2010-1-1 可是通不过,提示从字符串向 datetime 转换时失败  ''+@StartDate+''  这里我改成一个单引号,两个,三个单引号都不可以,都提示错误,请高手指点一下,谢谢了set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
alter  PROCEDURE [dbo].[gongsxq2]
(
@yh varchar(50),
@gs varchar(50),
@StartDate datetime,
@EndDate  datetime
)
AS
 declare @sql varchar(8000)set @sql='select a.料号,b.物品名称,b.规格,'
   
    +'avg(单价) as 均价 from kufrk a left  join  liaohao b  on a.料号=b.料号  '
+ '   where a.rukurq between  ''+@StartDate+''   and   ''2010-8-1''  group by a.料号,b.物品名称,b.规格'
--print @sql
exec (@sql)

解决方案 »

  1.   

    set @sql='select a.料号,b.物品名称,b.规格,'
      +'avg(单价) as 均价 from kufrk a left join liaohao b on a.料号=b.料号 '
    + ' where a.rukurq between '''+convert(varchar(10),@StartDate,120)+''' and ''2010-8-1'' group by a.料号,b.物品名称,b.规格'
    --print @sql
    exec (@sql)
      

  2.   

    日期转换用:CAST('2010-1-1' AS DATETIME)
      

  3.   

    用cast转换一下?cast(@StartDate as datetime)或者convert也可以。
      

  4.   

    在sql中不识别你说的2010-1-1这种类型的日期字符,只能能识别‘20100101’或者‘01012010’等等,在转换的时候当然会提示‘从字符串向 datetime 转换时失败’
      

  5.   

    set @sql='select a.料号,b.物品名称,b.规格,'
       
    +'avg(单价) as 均价 from kufrk a left join liaohao b on a.料号=b.料号 '
    + ' where a.rukurq between '+@StartDate + ' and CAST('2010-8-1' AS DATETIME)
    group by a.料号,b.物品名称,b.规格'
    --print @sql
    exec (@sql)
      

  6.   

    谢谢了,我还想问下大家,百分比形式的数在sql中怎么变成小数呢
      

  7.   


    declare @s varchar(20)
    set @s = '58%'
    select cast(replace(@s,'%','') as numeric(10,2)) /100结果
    0.580000