【发布时间】:2014-08-13 15:23:57
【问题描述】:
我意识到在大多数情况下这是一个微不足道的问题,但它现在似乎对我不起作用。我有一个存储过程,它创建一个 Datetime 变量,然后使用 datepart 函数创建一个设置为文件名的字符串。我借用了另一段代码,它以 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 */ 块中缺少 + 的部分,并且还删除了 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))
【问题讨论】:
-
您可以编辑您的帖子并向我们展示输入和所需的输出吗?
-
如果您使用的是 SQLServer 2012+,您可以使用
FORMAT -
输入只是#date 变量,输出是重新格式化该变量的不同部分并使其成为文件名的字符串。这存储在#FileName 变量中,并在另一个存储过程中用于将日期附加到文件名。这里的问题是它是一个自动化的过程,必须以 ddmmyyy 格式获取。 @ZoharPeled
-
对不起,但我使用的是工作笔记本电脑,因此仅限于 SQLSERVER2005,我目前是一家 IT 公司的学徒,因此我在看似简单的问题上遇到困难@Serpiton
-
此外,我注意到在 /* Year */ 代码块中 FileName = convert 部分没有“+”,因此这将覆盖存储在变量中的任何内容系统,在我的问题中,我认为问题可能是 IF 语句
标签: sql datetime sql-server-2005 dynamic filenames