2012-02-01 33 views
0

我有这个存储过程:格式字符串作为SQL中的日期?

ALTER Procedure [dbo].[GetWebinars] 
(
    @GroupingCode varchar(max) = 'AVM', 
    @ItemNumber varchar(max) out, 
    @Title varchar(max) out, 
    @SubTitle varchar(max) out, 
    @ShortDescription varchar(max) out, 
    @LongDescription varchar(max) out, 
    @ShortImageUrl varchar(max) out, 
    @MedImageUrl varchar(max) out, 
    @LgImageUrl varchar(max) out, 
    @GroupCode varchar(max) out, 
    @StartDate varchar(max) out 
) 
AS 
    select 
    @GroupingCode = prdtemp.groupingcode, 
    @ItemNumber = prd.itemnumber,  
    @Title = t.brochuredesc, 
    @SubTitle = prdtemp.SubTitle, 
    @ShortDescription = prdtemp.shortdescription, 
    @LongDescription = prdtemp.longdescription, 
    @ShortImageUrl = prdtemp.SmallImagePath, 
    @MedImageUrl = prdtemp.MediumImagePath, 
    @LgImageUrl = prdtemp.LargeImagePath, 
    @GroupCode = prd.GroupCode, 
    @StartDate = s.StartDate 

    from pryor_producttemplate prdtemp 
     inner join pryor_prdItmmst prd 
     on prdtemp.groupingcode = prd.groupcode 
     inner join pryor_topics t 
     on prd.itemnumber = t.topiccode 
     inner join Pryor_Schedule s 
     on t.TopicCode = s.topiccode  

    where [email protected] and t.country = 'U.S.A' 

我的问题是@StartDate是一个数据库中的字符变种。如何将其转换为适当的日期以呈现为D/M/YY?

+4

一个什么样的列'StartDate'任何想法?例如“2/29/12”或“1899年圣诞节”? – HABO 2012-02-01 18:18:02

+0

什么是D/M/YY格式?你如何以这种格式显示'30-JAN-2012'? – gdoron 2012-02-01 18:22:33

+1

这真的是问题的症结所在,所有的“日期”在同一格式的开始日期栏?即在将数值输入数据库时​​是否严格控制它们? – 2012-02-01 18:22:38

回答

0

您使用convert函数将字符串转换为datetime:

@StartDate = convert(datetime, s.StartDate, 120) 

第三个参数指定的日期格式。例如,值120指定人性化的ISO 8601格式。有关支持的所有日期格式,请参阅CAST and CONVERT的参考。

当然你也必须改变变量的类型:

@StartDate datetime out 
+0

只有全部采用可兑换格式才能使用。 – 2012-02-01 18:23:50

+2

这是一个合理的假设,当OP尚未阐明时它们处于可转换格式,并且转换允许数据采用多种不同的格式。他们不一定要采用相同的格式,只需要一些标准的日期格式。 – 2012-02-01 19:11:50

+0

@EB - 你说你'继续得到sql语法错误'具体是什么错误? – DaveE 2012-02-01 19:32:31