【发布时间】:2013-03-20 22:44:46
【问题描述】:
我有一个充满日期的字段,但它们存储为 varchars。它们采用以下格式:
- 01312013
- 01302013
- 09232007
我正在尝试编写一个只返回满足以下三个条件的记录的查询:
- 上述varchar“日期”的最后四个字符与上个月的年份匹配
- 上述 varchar“日期”的前两个字符与上个月匹配。
- 完全不同的日期字段(实际存储为日期)中的值在上个月内
我的尝试让我试图将上个月和上个月的年份存储在两个变量中,然后在 varchar“日期”上执行 LEFT() 和 RIGHT() 查找以查看它们是否匹配这两个变量变量。唷。
问题是 MONTH 存储为单个数字,我需要将其存储为“0”+月份数字(仅在单个数字月份的情况下)。此外,它甚至只工作一年,所以也许这完全关闭了。真的希望有人能帮忙!
这是我目前所拥有的:
DECLARE @monthAgo dateTime
DECLARE @MonthString char
DECLARE @YearString char
SET @monthAgo = DATEADD(month, -1, GETDATE())
SET @MonthString = MONTH(@monthAgo) -- not working
SET @YearString = YEAR(@monthAgo) -- not working
SELECT
COUNT(*)
FROM
jwemaildb.LogFileRecords
WHERE
date > = DATEADD(month, DATEDIFF(month, 0, GETDATE())-1, 0) AND
date < DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AND
RIGHT(eAlertSentDate, 4) = @YearString AND
LEFT (eAlertSentDate, 2) = @MonthString
【问题讨论】:
-
幸运的是,您可以将这些字符串转换为日期,除非您有一些奇怪的值,例如“哦,亲爱的”。然后就是一个简单的 dateadd()。
-
@DanBracuk - 我建议作为答案!通过一些错误检查,甚至可以处理“哦,亲爱的”。
-
是的,我的“哦,亲爱的”情况已经实现 - 从中剔除此日期的参数有时会在日志中出现问题,并且字段中有一堆文本。我现在需要想办法解决这个问题!感谢您为我指明正确的方向。
标签: sql sql-server-2008