我正在编写一个必须集成到现有旧架构中的系统应用程序。为此,我必须访问表中的位掩码字段;像这样:
SELECT * FROM directory WHERE (status & 64) | (status & 256);
我们现有的系统在MySQL上运行 - 我们有一个类似于上面的声明,它可以正常工作。
但是,在我必须与现有系统集成的新应用程序中,我在单元测试中使用了嵌入式HSQL。而对于我的生活,我无法弄清楚如何在HSQL中进行按位操作。此外,即使我能够弄清楚,我开始担心两个SQL引擎之间没有兼容的单个语句。
有关如何解决此问题的任何提示?目前我在想我必须只选择状态!= 0(当然限制结果集),然后用java来挑选我想要的那些匹配的特定的东西。状态我的定位。让人惊讶。
答案 0 :(得分:3)
这些操作是使用HSQLDB中的函数完成的。
http://hsqldb.org/doc/2.0/guide/builtinfunctions-chapt.html#bfc_numeric_functions
参见BITOR,BITXOR,BITAND,BITNOT,BITANDNOT等。
按位运算符在SQL方言中并不常见。 MySQL是一个例外,而不是常态。
答案 1 :(得分:0)
我从来没有找到更好的解决方案,而只是努力将我的嵌入式数据库从HSQL替换为MYSQL。
我也花时间写出更好的单元测试;即:对实际数据库运用我的数据库逻辑,但所有其他层使用模拟数据库逻辑。
这就是我的需要......对你在生产中使用的同一个数据库运行你的DDL测试,并针对DDL模拟运行所有其他逻辑。
对于后代,这是我用来构建嵌入式MYSQL的内容: http://zhentao-li.blogspot.com/2013/06/using-embedded-mysql-database-for-unit.html?m=1