Sql 合并where子句
我需要用合并两个条件从两列中筛选出值 如果(101102)中的级别和雇佣日期=当月将被删除 这是我的剧本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
选择员工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版本中都可用:。您的脚本非常短。我认为您的脚本比我的脚本好