我意识到在大多数情况下这是一个微不足道的问题,但它似乎并不适合我。我有一个存储过程创建一个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))
答案 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)