SQL Server外卡问题

时间:2017-11-23 08:02:43

标签: sql sql-server

我有一张表(日历)

Date                      Remark
2010-01-01                Sunday
2010-02-01                Saturday
2010-03-01                Public Holiday
2010-03-01                Rose Day
2010-04-01                Valentines day
2010-04-01                Public Holiday
2010-01-01                Sunday
2010-02-01                Saturday

我想只选择那些没有周六和周日的日期。

SELECT * FROM CALANDER WHERE REMARK NOT LIKE 'SATURDAY' OR Remark Not like 'Sunday'

我正在执行此查询,但这对我没有帮助。

5 个答案:

答案 0 :(得分:1)

你可以使用IN

SELECT * FROM Calendar WHERE REMARK NOT IN('Saturday', 'Sunday')

答案 1 :(得分:1)

这也许可以写成JOIN,dunno虽然更有效率:

SELECT *
FROM CALANDER
WHERE Date NOT IN (
    SELECT DISTINCT Date
    FROM CALANDER
    WHERE Remark IN ('Saturday', 'Sunday')
)

答案 2 :(得分:1)

好吧,如果你想使用正则表达式(通配符),你应该遵循这种方法:

周日和周六是S开始的唯一日期,因此您的通配符应如下所示:'S%day',在查询中:

SELECT * FROM Calendar WHERE REMARK LIKE 'S%day'

答案 3 :(得分:1)

只需使用AND代替OR

CREATE TABLE MyDates (
    [Date] DATE,
    Remark NVARCHAR(50)
    );
INSERT INTO MyDates VALUES
('2010-01-01',                'Sunday'),
('2010-02-01',                'Saturday'),
('2010-03-01',                'Public Holiday'),
('2010-03-01',                'Rose Day'),
('2010-04-01',                'Valentines day'),
('2010-04-01',                'Public Holiday'),
('2010-01-01',                'Sunday'),
('2010-02-01',                'Saturday');

SELECT *
FROM MyDates
WHERE Remark NOT LIKE 'Saturday' AND Remark Not like 'Sunday';
--Or Remark <> 'Saturday' AND Remark <> 'Sunday';

结果:

+---------------------+----------------+
|        Date         |     Remark     |
+---------------------+----------------+
| 01.03.2010 00:00:00 | Public Holiday |
| 01.03.2010 00:00:00 | Rose Day       |
| 01.04.2010 00:00:00 | Valentines day |
| 01.04.2010 00:00:00 | Public Holiday |
+---------------------+----------------+

结帐 demo

答案 4 :(得分:0)

你的病情应该是AND,而不是OR。

此外,如果要使用通配符,则任何字符的通配符都是%。

对您的查询进行的这些小修改将返回所有没有星期六和星期日的行作为其备注列的一部分:

SELECT * FROM CALANDER WHERE REMARK NOT LIKE '%Saturday%' AND Remark Not like '%Sunday%'