0

今日の日数が19以下の場合、前月の20日から将来までのレコードが必要です。例えば:

dbo.Invoices

Date        InvoiceNumber
10/20/2012  x
11/13/2012  y
11/20/2012  z
12/19/2012  aa
12/21/2012  bb

今日(11/13)、x、y、z、aa、bbが必要です。
11/20に、z、aa、bbが必要です。
12/19に、z、aa、bbが必要です。
12/21に、私はbbが必要です。

これは私がこれまでに持っているものです:

SELECT [omitted]
,CASE
    WHEN DAY(GETDATE()) <= 19 THEN

FROM QB_INVOICES_HEADER a
INNER JOIN CI_INVOICEADJS b
ON a.InvoiceNumber = b.InvoiceNumber
WHERE DATEDIFF(day, a.InvoiceDt, b.EffectiveCheckingDt) <= 60
ORDER BY b.EffectiveCheckingDt ASC
4

3 に答える 3

1

あなたDATEPART(DAY, [YOUR DATE COLUMN])はそれが月の何日であるかを伝えるために使用する必要があります。

于 2012-11-13T19:24:33.293 に答える
1

以下のコードはあなたのタスクを解決します。私はあなたのテーブル@invoicesの代わりにテーブル変数を使用しましたdbo.invoices

DECLARE @invoices TABLE ([date] DATE, invoiceNumber varchar(255));

INSERT INTO @invoices VALUES
    ('10/20/2012', 'x'),
    ('11/13/2012', 'y'),
    ('11/20/2012', 'z'),
    ('12/19/2012', 'aa'),
    ('12/21/2012', 'bb');

DECLARE @StartDate DATE;
DECLARE @today DATE ;

SET @today = '11/13/2012';
--SET @today = '11/20/2012';
--SET @today = '12/19/2012';
--SET @today = '12/21/2012';

IF DAY(@today) <= 19 BEGIN
    SET @startDate = DATETIMEFROMPARTS(YEAR(@today), MONTH(@today) - 1, 20,0,0,0.0,0);
END
ELSE BEGIN
    SET @startDate = @today
END

SELECT [date], invoiceNumber
FROM @invoices
WHERE [date] >= @StartDate
于 2012-11-13T19:36:20.410 に答える
1

SQLクエリだけ:

SQLFIDDLEExample

SELECT
InvoiceNumber
FROM Invoices
WHERE Date >= CASE WHEN DAY(GETDATE())<=19 
                    THEN CAST(MONTH(DATEADD (mm , -1 , GETDATE() )) as varchar(2))+
                         '/20/'+CAST(YEAR(DATEADD (mm , -1 , GETDATE() )) as varchar(4))
                    ELSE CONVERT(VARCHAR(10), GETDATE(), 101) 
              END

異なる日付が必要な場合は、GETDATE()を「10/19/2012」に置き換えてください。

SELECT
InvoiceNumber
FROM Invoices
WHERE Date >= CASE WHEN DAY('12/19/2012')<=19 
                    THEN CAST(MONTH(DATEADD (mm , -1 , '12/19/2012' )) as varchar(2))+
                         '/20/'+CAST(YEAR(DATEADD (mm , -1 , '12/19/2012' )) as varchar(4))
                    ELSE CONVERT(VARCHAR(10), '12/19/2012', 101) 
              END

2番目のクエリの結果:

| INVOICENUMBER |
-----------------
|             z |
|            aa |
|            bb |
于 2012-11-13T20:24:18.530 に答える