使用存储过程和datetime变量创建动态日期文件名

时间:2014-06-23 14:24:59

标签: sql datetime sql-server-2005 dynamic filenames

我意识到在大多数情况下这是一个微不足道的问题,但它似乎并不适合我。我有一个存储过程创建一个Datetime变量,然后使用datepart finction创建一个设置为文件名的字符串。我借用了另一段以yyyymmdd格式输出的代码但是我需要ddmmyyyy并且简单的重新洗牌似乎并没有起作用。 任何帮助将不胜感激。

 @Date datetime,
 @FileName varchar(14) OUTPUT

 as


/* Year */
SET @FileName = convert(char(4),datepart(yy, @Date))
/* Months */
IF datepart(mm, @Date) <= 9
SET @FileName = @FileName + '0'+ convert(char(1), datepart(mm, @Date))
ELSE
SET @FileName = @FileName + convert(char(2),datepart(mm, @Date))
/* Day */
IF datepart(dd, @Date) < =9
SET @FileName = @FileName + '0'+ convert(char(1), datepart(dd, @Date))
ELSE
SET @FileName = @FileName + convert(char(2),datepart(dd, @Date))

这是借用的代码,我尝试按如下方式重新排列,但只显示yyyy部分:

/* Day */
IF datepart(dd, @Date) < =9
SET @FileName = @FileName + '0'+ convert(char(1), datepart(dd, @Date))
ELSE
SET @FileName = @FileName + convert(char(2),datepart(dd, @Date))
/* Months */
IF datepart(mm, @Date) <= 9
SET @FileName = @FileName + '0'+ convert(char(1), datepart(mm, @Date))
ELSE
SET @FileName = @FileName + convert(char(2),datepart(mm, @Date))
/* Year */
SET @FileName = convert(char(4),datepart(yyyy, @Date))

经过检查,我注意到我的代码存在一些问题,所以我在/ * year * / block中更改了缺少+,我也删除了IF语句,但是这没有对问题进行排序:

/* Day */
SET @FileName = convert(char(2),datepart(dd, @Date))

/* Months */
SET @FileName = @FileName + convert(char(2),datepart(mm, @Date))

/* Year */
SET @FileName = @FileName + convert(char(4),datepart(yy, @Date))

3 个答案:

答案 0 :(得分:1)

这样的事情对你有用吗?

select replace(convert(varchar(10),@Date,103),'/','')

答案 1 :(得分:0)

SQLServer 2012或更好的函数FORMAT,IMO正是您所需要的

@Date datetime,
@FileName varchar(14) OUTPUT

SET @FileName = FORMAT(@Date, 'ddMMyyyy')

SQLFiddle demo 编辑为独立

答案 2 :(得分:0)

如果您的输入是日期时间,所需输出是ddmmyyyy格式的字符串,请尝试以下操作:

@Date datetime,
@FileName varchar(14) OUTPUT

SET @FileName = REPLACE(CONVERT(char(10), @Date, 103),'/', '');

CONVERT函数是sql server中的内置函数,它将返回一个格式为dd / mm / yyyy的字符串。在这种情况下。

REPLACE函数是一个内置函数,它将从该字符串中删除/ chars。