首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一条SQL语句的写法(在线)

2012-03-27 
请教一条SQL语句的写法(在线)数据如下:ABC112007-1-21212007-1-22302007-1-14

请教一条SQL语句的写法(在线)
数据如下:
A B C
===========================
1 1 2007-1-21
2 1 2007-1-22
3 0 2007-1-1
4 0 2007-1-2
5 1 2007-1-23
6 0 2007-1-3
7 0 2007-1-23
8 0 2007-1-25
9 1 2007-1-24
============================
要显示出所有B=0数据,但排除在B=1的情况下,C在2007-1-22到2007-1-23之外的数据。

查询后的结果集应该如下:
A B C
===========================
2 1 2007-1-22
3 0 2007-1-1
4 0 2007-1-2
5 1 2007-1-23
6 0 2007-1-3
7 0 2007-1-23
8 0 2007-1-25
============================

想了半天,不知道怎么做,谢谢各位了!

[解决办法]

SQL code
CREATE TABLE tb (a varchar(2),b varchar(2),c datetime)INSERT INTO tb VALUES ('1','1','2007-1-21')INSERT INTO tb VALUES ('2','1','2007-1-22')INSERT INTO tb VALUES ('3','0','2007-1-1')INSERT INTO tb VALUES ('4','0','2007-1-2')INSERT INTO tb VALUES ('5','1','2007-1-23')INSERT INTO tb VALUES ('6','0','2007-1-3')INSERT INTO tb VALUES ('7','0','2007-1-23')INSERT INTO tb VALUES ('8','0','2007-1-25')INSERT INTO tb VALUES ('9','1','2007-1-24')SELECT * FROM TB WHERE (B='0') OR NOT (B='1' AND C NOT BETWEEN '2007-1-22' AND '2007-1-23')DROP TABLE TB
[解决办法]
CREATE TABLE tb (a varchar(2),b varchar(2),c datetime)
INSERT INTO tb VALUES ('1','1','2007-1-21')
INSERT INTO tb VALUES ('2','1','2007-1-22')
INSERT INTO tb VALUES ('3','0','2007-1-1')
INSERT INTO tb VALUES ('4','0','2007-1-2')
INSERT INTO tb VALUES ('5','1','2007-1-23')
INSERT INTO tb VALUES ('6','0','2007-1-3')
INSERT INTO tb VALUES ('7','0','2007-1-23')
INSERT INTO tb VALUES ('8','0','2007-1-25')
INSERT INTO tb VALUES ('9','1','2007-1-24')

select * from tb where b=0 or b=1 and c between '2007-1-22' and '2007-1-23'
[解决办法]
SQL code
SELECT * FROM TB WHERE (B='0') OR (B='1' AND C BETWEEN '2007-1-22' AND '2007-1-23')
[解决办法]
SQL code
--> 测试数据: #Tif object_id('tempdb.dbo.#T') is not null drop table #Tcreate table #T (A int,B int,C datetime)insert into #Tselect 1,1,'2007-1-21' union allselect 2,1,'2007-1-22' union allselect 3,0,'2007-1-1' union allselect 4,0,'2007-1-2' union allselect 5,1,'2007-1-23' union allselect 6,0,'2007-1-3' union allselect 7,0,'2007-1-23' union allselect 8,0,'2007-1-25' union allselect 9,1,'2007-1-24'select * from #T where B=0 or (B=1 and c between '2007-1-22' and '2007-1-23')/*A           B           C----------- ----------- -----------------------2           1           2007-01-22 00:00:00.0003           0           2007-01-01 00:00:00.0004           0           2007-01-02 00:00:00.0005           1           2007-01-23 00:00:00.0006           0           2007-01-03 00:00:00.0007           0           2007-01-23 00:00:00.0008           0           2007-01-25 00:00:00.000*/
[解决办法]
要显示出所有B=0数据,但排除在B=1的情况下,C在2007-1-22到2007-1-23之外的数据。
----------------------------
(所有B=0的数据) 或者 (B=1并且C在2007-1-22到2007-1-23之间的数据)
没难度,楼主没理清逻辑而已。

热点排行