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

本文关键字:数据 字符串 SQL IF 语句 检查 使用 | 更新日期: 2023-09-27 18:34:11

我有一个带有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);

感谢您的帮助!

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

尝试使用 oracle 函数 BITAND https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions014.htm#SQLRF00612

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

AND RAWOUTPUT1 <> 0

还是设置了所有给定 10 位的所有记录?

AND RAWOUTPUT1 = 1023

或者十位中至少有一个设置在哪里?

AND BITAND(RAWOUTPUT1, 1023) > 0

编辑:如果您正在寻找某个位,则位与 2 的相应幂:

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

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

AND BITAND(RAWOUTPUT1, 1) <> 0