我在SQL Server2005中有一个SQL查询,当包含条件顺序时,该查询将中断。当我删除订单时,查询有效。当我按条件明确地写顺序(例如按p.Description的顺序)时,它就起作用了。当我添加条件顺序依据时,我得到了错误,
'Conversion failed when converting character string to smalldatetime data type'
SQL Server没有显示导致该错误的代码行。我想知道如何解决此问题,以便可以使用条件排序依据或对转换失败的列进行故障排除。
declare @SearchTerm nvarchar(255) declare @SortBy nvarchar(255) declare @Months int declare @VendorID int declare @ProductID int set @SearchTerm = 'focus' set @SortBy = 'product' set @Months = 3 set @VendorID = null set @ProductID = null -- This makes it so the @Month will filter by n number of months ago. declare @PreviousMonths datetime if @Months is null begin set @PreviousMonths = 24 end else begin set @PreviousMonths = DateAdd(month, -@Months, GetDate()) end select a.dsAlertID as AlertID, a.ProductID, v.VendorID, p.Description as ProductName, v.LongName as VendorName, a.Introduction, a.Writeup, a.DateAdded from ev_ds_Alerts a left outer join tblProducts p on a.ProductID = p.ProductID left outer join tblVendors v on v.VendorID = p.VendorID where ( @SearchTerm is null or ( a.Writeup like '% ' + @SearchTerm + '%' or a.Introduction like '% ' + @SearchTerm + '%') ) and (( @Months is null ) or ( @Months is not null and a.DateAdded >= @PreviousMonths)) and (( @VendorID is null ) or ( @VendorID is not null and v.VendorID = @VendorID )) and (( @ProductID is null ) or ( @ProductID is not null and p.ProductID = @ProductID )) order by case @SortBy when 'product' then p.Description when 'vendor' then v.LongName else a.DateAdded end -- order by p.Description or v.LongName works when explicitly writing them out!
根据先前的答案,尝试:
order by case @SortBy when 'product' then p.Description when 'vendor' then v.LongName else convert(VARCHAR(25),a.DateAdded,20)
这将为您提供所需的排序,因为它将格式化日期字符串yyyy-mm-dd hh:mm:ss。