Sql 合并where子句

Sql 合并where子句,sql,asp.net,sql-server,Sql,Asp.net,Sql Server,我需要用合并两个条件从两列中筛选出值 如果(101102)中的级别和雇佣日期=当月将被删除 这是我的剧本 选择员工ID、员工姓名、级别、原始雇用日期 从桌子上 哪里 (级别为('101','102')和月份(原始雇用日期)!=月份(GETDATE())和年份(原始雇用日期)!=年份(GETDATE()),活动>0,位置代码='1030' 按级别asc订购 由于脚本结果是所有级别101102都被删除了,但我想要的是级别101102和雇佣不等于当前月份 示例数据 期望结果 如果您的sql ser

我需要用合并两个条件从两列中筛选出值 如果(101102)中的级别和雇佣日期=当月将被删除 这是我的剧本

选择员工ID、员工姓名、级别、原始雇用日期
从桌子上
哪里
(级别为('101','102')和月份(原始雇用日期)!=月份(GETDATE())和年份(原始雇用日期)!=年份(GETDATE()),活动>0,位置代码='1030'
按级别asc订购
由于脚本结果是所有级别101102都被删除了,但我想要的是级别101102和雇佣不等于当前月份

示例数据

期望结果

如果您的
sql server
高于
2012
,则可以使用
format()

SELECT EMPLOYEE_ID,EMPLOYEE_NAME, LEVEL, ORIGINAL_HIRE_DATE
FROM Table
WHERE
    (LEVEL not in ('101','102')  and ACTIVE > 0 and LOCATION_CODE = '1030' 
UNION ALL
SELECT EMPLOYEE_ID,EMPLOYEE_NAME, LEVEL, ORIGINAL_HIRE_DATE
FROM Table
WHERE
    (LEVEL  in ('101','102') and (LEFT(CONVERT(varchar, ORIGINAL_HIRE_DATE,112),6) != LEFT(CONVERT(varchar, GetDate(),112),6))
    and ACTIVE > 0 and LOCATION_CODE = '1030' 
或者您可以使用
运算符

SELECT EMPLOYEE_ID,EMPLOYEE_NAME, LEVEL, ORIGINAL_HIRE_DATE
FROM Table
WHERE
  (LEVEL not in ('101','102') 
  OR
  (LEVEL in ('101','102') and (LEFT(CONVERT(varchar, ORIGINAL_HIRE_DATE,112),6) != LEFT(CONVERT(varchar, GetDate(),112),6)))
    and ACTIVE > 0 and LOCATION_CODE = '1030' 
我可以使用
EOMONTH()
作为当前日期。这将导致:

SELECT EMPLOYEE_ID, EMPLOYEE_NAME, LEVEL, ORIGINAL_HIRE_DATE
FROM Table
WHERE LEVEL NOT (101, 102) AND
      EOMONTH(ORIGINAL_HIRE_DATE) <> EOMONTH(GETDATE()) AND
      ACTIVE > 0 AND
      LOCATION_CODE = 1030 
ORDER BY LEVEL ASC;
选择员工ID、员工姓名、级别、原始雇用日期
从桌子上
其中不包括(101、102)和
EOMONTH(原始雇用日期)EOMONTH(GETDATE())和
活动>0和
位置\ U代码=1030
按级别ASC排序;

我删除了
101
102
1030
中的单引号。这些值看起来像数字,所以我假设它们是。如果值是字符串(或日期),则仅使用单引号。

现在我使用+两列,然后比较它是否有效,但我不确定性能和正确方式。

您应该在where子句的开头添加not并更改它们!=从=

create table #t1 (level int, original_hire_date date);
insert into #t1 values(101,'2019-09-19');
insert into #t1 values(102,'2019-09-19');
insert into #t1 values(103,'2019-09-19');
insert into #t1 values(104,'2019-09-19');
insert into #t1 values(200,'2019-09-19');
insert into #t1 values(101,'2018-9-11');

select *
from #t1
where not (level in ('101','102') and month(original_hire_date)=month(getdate()) and year(original_hire_date)=year(getdate()))
结果:

示例数据和期望的结果确实会有帮助。好的,我刚刚编辑了示例数据和期望的结果。面临的“格式”不是公认的内置函数名“请尝试第二个查询它可以工作,但我的目标是根据您期望的输出筛选出一些值它应该是
不在('101','102'))
是的,我想是的,但我需要101102已雇佣不等于当前monthi面临的“EOMONTH”不是公认的内置函数名“@WD\u Apps…”
EOMONTH()
在每个受支持的SQL Server版本中都可用:。您的脚本非常短。我认为您的脚本比我的脚本好