我正在尝试向SELECT
的所有记录编写SQL语句,并检查特定月份。我有一个表单,其中包含1月到12月的复选框,具体取决于选中的复选框,它将执行SQL查询以返回所选月份的行。
我无法想到WHERE
条件可以使其发挥作用,我只能考虑使用IF
WHERE MONTH(happened_at) = 1 AND MONTH(happened_at) = 3
条件执行78个不同的查询,依此类推,直到所有可用选项都为止覆盖。
答案 0 :(得分:1)
或许尝试WHILE loop。
-- Declare your month.
DECLARE @MONTH_NUM INT = 1
-- Establish your table.
DECLARE @TABLE TABLE
(
MONTH_NUM INT,
COL1 VARCHAR(255),
COL2 VARCHAR(255)
)
-- Set the WHILE loop cap.
WHILE @MONTH_NUM <= 78
-- Begin your loop.
BEGIN
-- Insert your values into the table.
INSERT INTO @TABLE (MONTH_NUM, COL1, COL2)
SELECT
T.MONTH_NUM
,T.COL1
,T.COL2
FROM [TABLE] T
WHERE @MONTH_NUM = T.MONTH_NUM
-- Set the month counter.
SET @MONTH_NUM = @MONTH_NUM + 1
END
-- Return your results.
SELECT
T.MONTH_NUM
,T.COL1
,T.COL2
FROM
@TABLE
答案 1 :(得分:0)
尝试
SELECT ... WHERE MONTH(happened_at) IN (1,2,4,7)
最好的是,你熟悉VBA并编写一个相应的函数,如下所示:
Private Function CreateSQL
Dim str As String
str = IIf(Me.cbJan, ",1", "") & _
IIf(Me.cbFeb, ",2", "") & _
IIf(Me.cbAug, ",8", "")
str = Mid(str, 2)
CreateSQL = "SELECT * FROM Table1 WHERE MONTH(happened_at) IN (" & str & ");"
End Sub
那就是:你通过添加一个逗号和那个月号在括号内创建月份列表,然后你复制除了第一个逗号之外的所有内容并将它放在括号中......
答案 2 :(得分:0)
为复选框准备12个变量。然后为它们分配数值:
if <checkbox1 is checked> then $box01 = 1 else $box01 = 0; -- or NULL
if <checkbox2 is checked> then $box02 = 2 else $box01 = 0;
. . .
然后构造查询:
where month(happened_at) in ($box01, $box02, $box03, . . . , $box12)
然后,思考为什么你不只是start_month
和end_month
。