日付で満たされたフィールドがありますが、それらはvarcharsとして保存されます。それらは次の形式です。
- 01312013
- 01302013
- 2007年9月23日
次の3つの条件を満たすレコードのみを返すクエリを作成しようとしています。
- 前述のvarchar「date」の最後の4文字は、前月の年と一致します
- 前述のvarchar「date」の最初の2文字は、前月と一致します。
- まったく異なる日付フィールド(実際には日付として保存されている)の値は、前月に含まれます
私の試みでは、前月と前月の年を2つの変数に格納し、varchar "date"に対してLEFT()およびRIGHT()ルックアップを実行して、これら2つの変数と一致するかどうかを確認しようとしました。ふぅ。
問題は、MONTHが1桁で格納されていることであり、「0」+月の桁(1桁の月の場合のみ)として格納する必要があります。また、それは1年だけも機能していないので、おそらくこれは完全にオフになっています。誰かが助けてくれることを本当に願っています!
これが私がこれまでに持っているものです:
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