日期:2014-05-17  浏览次数:20469 次

怎么格式化日期
我有个存储过程,过程里,表里的日期跟输入参数进行比较

表里的日期好弄,无非是 convert(xx)这个方式。

问题是输入的参数,是个varchar类型。格式很不统一,有‘20130101’这样的,有‘2013/1/1’这样的,还有‘2013-01-01 12:15:15’这样,还有其他的格式。

我怎么能把输入的参数统一起来?这个只能在存储过程里做,不能在外面程序做,因为外面的程序很多,有些已经没有源代码了。

------解决方案--------------------
convert(datetime,日期参数) 
------解决方案--------------------

declare @Cdate varchar(20)
set @Cdate='20130726'
select Convert(datetime,@Cdate,121)
set @Cdate='2013/1/1'
select Convert(datetime,@Cdate,121)

/*
2013-07-26 00:00:00.000

2013-01-01 00:00:00.000
*/

都给他转换了  这个还是可以的 
------解决方案--------------------
既然格式不一样,就有可能输入非法日期格式,有可能输入的根本不是日期。
你说只能在存储过程里处理,那就要做次判断,用isdate()函数判断
如果不是日期,带“/”杠的什么转换,带“-”杠要什么转换


------解决方案--------------------
如果只是这三种,还好判断一点。
先判断里面是不是带“/”,如果带,就是一种转换方式。
先判断里面是不是带“-”,如果带,就是另一种转换方式。
最后的就是什么都不带的,就是第三种转换方式了。
------解决方案--------------------
convert(datetime,参数)

declare @参数1 nvarchar(20)
declare @参数2 nvarchar(20)
declare @参数3 nvarchar(20)
set @参数1='20130101' 
set @参数2='2013/1/1' 
set @参数3='2013-01-01 12:15:15' 
select convert(datetime,@参数1)
select convert(datetime,@参数2)
select convert(datetime,@参数3)
/*
2013-01-01 00:00:00.000
2013-01-01 00:00:00.000
2013-01-01 12:15:15.000
*/