【问题标题】:Create dynamic date filename using a stored procedure and a datetime variable使用存储过程和日期时间变量创建动态日期文件名
【发布时间】: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


【解决方案1】:

这样的东西对你有用吗?

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

【讨论】:

  • 在存储过程中使用 SELECT 语句似乎存在问题,所以我不确定这会有所帮助
  • 很抱歉“钢化”你的答案,我发誓当我发布我的...朋友时我没有看到它? :-)
  • 我尝试了 Narti 和 Zohar 的两种解决方案,但当我运行包含未拾取文件的存储过程的“作业”时,它们似乎都不起作用
  • @Serpiton 我的代码是存储过程,缺少的只是创建过程等;然后它从声明变量开始
【解决方案2】:

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

@Date datetime,
@FileName varchar(14) OUTPUT

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

SQLFiddle demo 编辑为独立

【讨论】:

  • 我目前正在使用 SQLSERVER2005,因为它在工作中没有太多的移动空间,有没有相关的替代方案?
  • @ShaneToner 您可以使用 Narti 的答案,将 SELECT 更改为 SET @FileName = ,例如 this
【解决方案3】:

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

@Date datetime,
@FileName varchar(14) OUTPUT

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

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

REPLACE 函数是一个内置函数,可以从该字符串中删除 / 字符。

【讨论】:

  • 昨天纳尔蒂写的答案你看到了吗?
猜你喜欢
  • 2021-07-28
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
相关资源
最近更新 更多