【问题标题】:How to set month and day from one table to new stored procedure如何将一张表中的月份和日期设置为新的存储过程
【发布时间】:2016-08-13 19:11:14
【问题描述】:
declare
    @pm_WeekEndDate DATETIME,
    @lp_Day VARCHAR(10),
    @intDate DATETIME

set @pm_WeekEndDate = MONTH(@pm_WeekEndDate)
set @lp_Day = day(@pm_WeekEndDate)
set @intDate = (@pm_WeekEndDate & @lp_Day)

此代码应占用一月月份然后 = 1,因为其他表中的所有数字都包括第 1 个月到第 12 个月和第 1 天到第 7 天。

但我收到此错误:

消息 402,第 16 级,状态 1,程序 PRO,第 60 行
'&' 运算符中的数据类型 datetime 和 varchar 不兼容。

【问题讨论】:

  • 这甚至与您认为的情况相去甚远。当您将日期时间变量设置为 MONTH(DateValue) 时,它将是 1900 年 1 月设置的日期。使用 DAY 也是如此。也许如果你能解释你在这里真正想要做什么,我们可以提供帮助。还有 mysql sqlserver...你应该只标记你实际使用的 DBMS。
  • 报错信息是SQL Server,所以我去掉了MySQL标签。我还会注意到这个问题对我来说没有意义。你在问什么?

标签: sql sql-server database tsql


【解决方案1】:

这纯粹是对极其模糊的细节以及过去这种糟糕的桌子设计的猜测。您正在寻找类似的东西吗?

declare @pm_WeekEndDate DATETIME = getdate()

select @pm_WeekEndDate

declare @DateVal char(4)

select @DateVal = right('00' + convert(varchar(2), MONTH(@pm_WeekEndDate)), 2) + right('00' + convert(varchar(2), DAY(@pm_WeekEndDate)), 2)

select @DateVal

请注意,您不能将结果设为日期,因为它没有意义。我猜你的表有存储为字符串或整数的日期??

【讨论】:

  • 如果这适用于您的情况,您应该考虑将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2021-10-22
  • 2013-10-18
  • 2011-06-27
相关资源
最近更新 更多