【问题标题】:Need to modify a variable data to use as a "LIKE" in a COUNT query需要修改变量数据以在 COUNT 查询中用作“LIKE”
【发布时间】:2021-04-22 13:03:40
【问题描述】:

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

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

我有两张桌子:

  • 示例表

桌子上的代码:

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

enter image description here

  • KPS_SMP_DUE_DATE_WEEK_PIVOT_VW

桌子上的代码:

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

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

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

【问题讨论】:

    标签: sql sql-server count sql-like


    【解决方案1】:

    如果您已将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)
    

    【讨论】:

      【解决方案2】:

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

      在您的查询中,更改

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

      YEAR(s.C_DUE_DATE_2) = vw.year
      

      【讨论】:

        【解决方案3】:

        您可以使用YEARDATEPART函数如下:

        YEAR(s.C_DUE_DATE_2) = vw.year
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-06
          • 2011-11-07
          • 1970-01-01
          • 2016-04-09
          • 1970-01-01
          • 2017-10-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多