使用IF语句检查SQL字符串中的数据

时间:2014-12-15 09:28:04

标签: c# sql oracle

我有一个带有SQL语句的Oracle连接字符串:

OracleCommand cmd = new OracleCommand("SELECT * FROM Database WHERE IPADDRESS='10.00.000.000' ORDER BY DATETIME ASC", con);

在加载数据集中的所有数据后,我检查“RAWOUTPUT1”行的位并将其写入正确的列:

int bit = Convert.ToInt32(dr[22]);

dr[24] = (bit & (1 << 0)) != 0;
dr[25] = (bit & (1 << 1)) != 0;
dr[26] = (bit & (1 << 2)) != 0;
dr[27] = (bit & (1 << 3)) != 0;
dr[28] = (bit & (1 << 4)) != 0;
dr[29] = (bit & (1 << 5)) != 0;
dr[30] = (bit & (1 << 6)) != 0;
dr[31] = (bit & (1 << 7)) != 0;
dr[32] = (bit & (1 << 8)) != 0;
dr[33] = (bit & (1 << 9)) != 0;

我现在的问题是数据太大而且我得到了内存异常。所以我的想法是只加载我需要的数据库中的数据,如下所示:

OracleCommand cmd = new OracleCommand("SELECT * FROM Database WHERE IPADDRESS='10.00.000.000' 
AND IF((RAWOUTPUT1 & (1 << 0)) != 0) //here I need help, example for check bit
ORDER BY DATETIME ASC", con);

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

你在找什么?所有记录,其中至少有一位在RAWOUTPUT1中设置?

AND RAWOUTPUT1 <> 0

或者所有给定10位的记录都被设置了吗?

AND RAWOUTPUT1 = 1023

或者设置了十位中的至少一位?

AND BITAND(RAWOUTPUT1, 1023) > 0

编辑:如果你正在寻找一个位,那么bitand和2的相应功率:

AND BITAND( RAWOUTPUT1, POWER(2,:n-1) ) <> 0

答案 2 :(得分:1)

我对Oracle数据库没有多少经验,但我认为在WHERE子句中不能以这种方式使用IF条件。过滤行设置您的条件,如:

AND BITAND(RAWOUTPUT1, 1) <> 0