Sql 变量中的日期计算
我正在尽力设置一个日期变量,以便以后比较。我想要一些基本上说: 如果当月的当前日期小于11,则日期为上月的10日 如果当月的当前日期大于或等于11,则日期为本月10日 日期为2012年11月6日预期产出:Sql 变量中的日期计算,sql,sql-server-2005,Sql,Sql Server 2005,我正在尽力设置一个日期变量,以便以后比较。我想要一些基本上说: 如果当月的当前日期小于11,则日期为上月的10日 如果当月的当前日期大于或等于11,则日期为本月10日 日期为2012年11月6日预期产出: @PODate = 10/10/2012 @PODate = 11/10/2012 日期为2012年11月16日预期产出: @PODate = 10/10/2012 @PODate = 11/10/2012 目前我所拥有的是: DECLARE @PODate as DATETIME S
@PODate = 10/10/2012
@PODate = 11/10/2012
日期为2012年11月16日预期产出:
@PODate = 10/10/2012
@PODate = 11/10/2012
目前我所拥有的是:
DECLARE @PODate as DATETIME
Set @PODate = Convert(varchar(8),GetDate(),1)
任何提示或帮助都将不胜感激。谢谢
DECLARE @currDate DATE = dbo.GetDate()
DECLARE @day INT = day(@currDate)
DECLARE @month INT
DECLARE @year INT
DECLARE @PODate DATE
IF( @day >= 11)
BEGIN
SET @month = month(@currDate)
SET @year = year(@currDate)
END
ELSE BEGIN
SET @month = month(dateadd(m,-1,@currDate))
SET @year = year(dateadd(m,-1,@currDate))
END
SET @PODate = convert(DATE,'10-' + convert(VARCHAR,@month) + '-' + convert(VARCHAR,@year))
PRINT @PODate
如果@currDate='2013年1月11日',@PODate将为'2013年1月10日',如果@currDate='2013年1月7日',@PODate将为'2012年12月10日'
如果@currDate='2013年1月11日',@PODate将是'2013年1月10日',如果@currDate='2013年1月7日',@PODate将是'2012年12月10日'尝试以下方法:
试试这个:
演示
在上演示,尽量使其简单明了:
declare @PODate datetime
select @PODate = DATEADD(month,
DATEDIFF(month,'20010110',CURRENT_TIMESTAMP) +
CASE WHEN DATEPART(day,CURRENT_TIMESTAMP) <= 10 THEN -1 ELSE 0 END,
'20010110')
周围的DATEADD/DATEDIFF对用于将日期标准化为当前月份的第10个。然后,如果一天小于或等于第10天,我们使用一个小写表达式减去一个月
无论您选择哪种解决方案,请尽量避免使用字符串操纵的解决方案。SQL中与日期时间相关的错误的常见原因是人们将日期视为字符串。适当地保存数据类型通常是防止这些问题的最佳方法
不可否认,我的解决方案中有两个字符串,但这些字符串是固定不变的。重要的是,它们都用于同一年和同一个月,第二个字符串用于该月的第10个月,并且格式明确。尽可能简单:
declare @PODate datetime
select @PODate = DATEADD(month,
DATEDIFF(month,'20010110',CURRENT_TIMESTAMP) +
CASE WHEN DATEPART(day,CURRENT_TIMESTAMP) <= 10 THEN -1 ELSE 0 END,
'20010110')
周围的DATEADD/DATEDIFF对用于将日期标准化为当前月份的第10个。然后,如果一天小于或等于第10天,我们使用一个小写表达式减去一个月
无论您选择哪种解决方案,请尽量避免使用字符串操纵的解决方案。SQL中与日期时间相关的错误的常见原因是人们将日期视为字符串。适当地保存数据类型通常是防止这些问题的最佳方法
诚然,在我的解决方案中有两个字符串,但这些是固定不变的字符串。重要的是,它们都用于同一年和同一个月,第二个用于本月的第10个,格式明确。非常有效,Damien!!也谢谢你的提示。。。我非常擅长Excel,试图在SQL方面做得更好-所以每一个提示都会帮上大忙!!工作得很有魅力,达米恩!!也谢谢你的提示。。。我非常擅长Excel,试图在SQL方面做得更好-所以每一个提示都会帮上大忙!!