需要修改变量数据以在 COUNT 查询中用作 "LIKE"

Need to modify a variable data to use as a "LIKE" in a COUNT query

我试图在 LIKE 语句中使用数值变量,但我不知道如何将数据更改为数值。

在我们开始之前,我很抱歉,因为我无法复制 table 结构,因为我正在使用不允许我看到它的“SQL 环境”,所以我我会尽力解释的。

我有两个 table:

table 上的代码:

SELECT sample_number,project,status,template,parent_aliquot,C_DUE_DATE_2
FROM SAMPLE
ORDER BY SAMPLE_NUMBER DESC

enter image description here

table 上的代码:

select *
from KPS_SMP_DUE_DATE_WEEK_PIVOT_VW
where project = 'S/180308/01'

此 table 的重要字段是“PROJECT”、“PRODUCT”和“YEAR”。 table 右侧的字段并不重要。

enter image description here

我有这个代码:

SELECT vw.project,vw.year,(SELECT COUNT(s.sample_number)
                                      FROM SAMPLE s
                                      WHERE s.PROJECT = vw.PROJECT AND s.STATUS IN ('I', 'U', 'P') and s.TEMPLATE = 'KPS_DEFAULT' AND s.PARENT_ALIQUOT > 0 
                                      and s.C_DUE_DATE_2 < {ts '2021-01-20 00:00:00'} and s.C_DUE_DATE_2 LIKE '%'vw.year'%')
FROM KPS_SMP_DUE_DATE_WEEK_PIVOT_VW vw
where vw.project = 'S/180308/01' and vw.department = 'QC'

如前所述,“KPS_SMP_DUE_DATE_WEEK_PIVOT_VW”具有按“年”字段分类的条目,因此我尝试使用以下代码获取每年过期的样本总数:

SELECT COUNT(s.sample_number)
                                      FROM SAMPLE s
                                      WHERE s.PROJECT = vw.PROJECT AND s.STATUS IN ('I', 'U', 'P') and s.TEMPLATE = 'KPS_DEFAULT' AND s.PARENT_ALIQUOT > 0 
                                      and s.C_DUE_DATE_2 < {ts '2021-01-20 00:00:00'} and s.C_DUE_DATE_2 LIKE '%'vw.year'%'

我希望“%'vw.year'%”能够正常工作,预期结果如下:

谢谢

enter image description here

您可以使用YEARDATEPART函数,如下所示:

YEAR(s.C_DUE_DATE_2) = vw.year

DATEPART(YEAR,s.C_DUE_DATE_2) = vw.year

您可能应该从 C_DUE_DATE_2 中提取年份值并将该值与 vw.year

进行比较

在您的查询中,更改

s.C_DUE_DATE_2 LIKE '%'vw.year'%'

YEAR(s.C_DUE_DATE_2) = vw.year

如果您有 C_DUE_DATE_2 索引,那么 在其上使用 YEAR 函数会快得多。相反,构造一个涵盖该年的日期间隔:

s.C_DUE_DATE_2 >= DATEFROMPARTS(vw.year, 1, 1)
    AND s.C_DUE_DATE_2 < DATEFROMPARTS(vw.year + 1, 1, 1)