舉例
T1表
DATE
20210723
20210725
20210728
T2表
MAC| DS| DE
A| 20210601| 20210620
B| 20210701| 20210730
C| 20210720| 20210730
D| 20210801| 20210815
E| 20210601| 20210820
要找出T2中,DS~DE區間中,符合T1指定日期的所有資料
類似↓(這是錯的,只是表達意思)
SELECT * FROM T2
WHERE (SELECT DATE FROM T1) BETWEEN T2.DS AND T2.DE
這種感覺
結果要顯示 B,C,E這三筆(這三筆的區間日期都有T1的日期)
請問SQL 要怎樣修正?
大大好,請問如果 來源不是一個表,而也是一個傳入值的區間呢?
SELECT * FROM T2
WHERE ( ? ~ ? ) BETWEEN T2.DS AND T2.DE
如果沒輸入起訖,就表示全部查詢
DECLARE @TABLE_A AS TABLE
(
[DATE] DATE
)
DECLARE @TABLE_B AS TABLE
(
[MAC] NVARCHAR(2),
[DS] DATE,
[DE] DATE
)
INSERT INTO @TABLE_A VALUES
('20210723'),
('20210725'),
('20210728')
INSERT INTO @TABLE_B VALUES
('A','20210601','20210620'),
('B','20210701','20210730'),
('C','20210720','20210730'),
('D','20210801','20210815'),
('E','20210601','20210820')
SELECT DISTINCT MAC,DS,DE FROM @TABLE_B
INNER JOIN @TABLE_A ON [DATE] BETWEEN DS AND DE
結果如下
大大,你好,請問如果 來源不是一個表,而也是一個傳入值的區間呢?
SELECT * FROM T2
WHERE ( ? ~ ? ) BETWEEN T2.DS AND T2.DE
如果沒輸入起訖,就表示全部查詢
傳入值直接丟yyyymmdd
就好
SELECT * FROM T2
WHERE '20210701' BETWEEN T2.DS AND T2.DE
起訖是你的DS跟DE才對
沒輸入的話這邊就不用下where語句
我的意思類似
SELECT * FROM T2
WHERE ('20210701'~'20210820') BETWEEN T2.DS AND T2.DE
指定一個區間的比對
然後會顯示B,C,D,E 共4筆資料
參考@@
select a.*
from T2 a
,T1 b
where b.DATE between a.DS and DE