我正在使用Microsoft SQL Server 2012 Management Studio。在下面的表格中,我试图摆脱2019年1月1日至2019年1月4日之间的ID数字,这些ID数字为5位数字或破折号以零开头。
IDnum DateTime
-----------------------
11-102434 03/01/2019
11-02434 03/01/2019
11-102421 02/01/2019
11-02421 02/01/2019
10-02345 31/12/2018
这就是我想看到的
IDnum DateTime
-------------------------
11-102434 03/01/2019
11-102421 02/01/2019
10-02345 31/12/2018
我认为where子句中需要某种RTRIM()
,但不确定如何执行此操作。
答案 0 :(得分:3)
这不是一个相对简单的where
子句吗?
where not (datetime >= '2019-01-01' and datetime < '2019-01-05' and
(idnum like '%-_____' or
idnum like '%-0%'
)
)
答案 1 :(得分:2)
这是一种方式。
SELECT IDnum, DateTime
FROM YourTable
WHERE NOT (DateTime >= '2019-01-01' AND DateTime < '2019-01-05' --exclude from 1st Jan 2019 to 4th Jan 2019
AND (IDnum LIKE '%-_____' --that are 5 digits long after the dash
OR
IDnum LIKE '%-0%' --or begin with a 0 (after the dash)
)
)
答案 2 :(得分:1)
阅读您的问题,排除的数据中有两个主要标准:
IDNum
的长度为5个字符(短划线后) OR 或IDNum
(短划线后)的长度为0。与@Gordon的答案一样,您可以将其包装在NOT
中:
WHERE NOT
(
[DateTime] >= '2019-01-01'
AND [DateTime] <= '2019-01-04'
AND
(
IDNum LIKE '%-0%'
OR IDnum LIKE '%-_____'
)
)
使用De Morgan's laws,我们可以简化一下(或至少分发NOT
):
WHERE
(
[DateTime] < '2019-01-01'
OR [DateTime] > '2019-01-04'
OR
(
IDNum NOT LIKE '%-0%'
AND IDnum NOT LIKE '%-_____'
)
)
答案 3 :(得分:0)
如果您的目的是满足以下两个条件:=
DateTime应该在2019年1月1日至1月4日之间
在IDNum中,“-”后的数字长度应大于或等于5, 那么您可能不需要rtrim。
代码:
Select * from Test where DateTime >= '01-01-2019' and DateTime <= '01-03-2019' and ((SUBSTRING(IDNum, 4, 1) = 0) or LEN(SUBSTRING(IDNum, 4, LEN(IDNum)-1)) >= 5);
虽然我不确定您的预期结果如何显示2018年12月31日。 :D