0

我有一个包含行的表,其中一个字段是 7 位的位值。

假设我有一个过程,我想选择该位字段等于“0101010”的所有行,这很容易通过 select * where .... 等来完成。

但是:如果我想允许一位/多位数字为 1 或 0,我该怎么办,即我想获取位域在表单 1001*1* 上具有条目的所有行,其中 * 可以是1 或 0。因此,在这种情况下,我想要位字段为 1001010、1001011、1001110 或 1001111 的所有条目。

select * from TABLE where bit_field in (1001010, 1001011, 1001110, 1001111) 在这个例子中可能会起作用,但是如果我只想使用字符串 '1001*1*' 作为过程的输入,那该怎么办?. 非常感谢任何帮助。

谢谢, 尼克拉斯

编辑:我试过这个:select * from table where field like bit'\\\\0'; 获取表单* * 0 的所有条目,但这不起作用...

Edit2:原来它是一个位域,而不是二进制......问题仍然存在。

4

1 回答 1

0

本身不是对您问题的直接回答,而是另一种方法。您提到由于遗留代码,您不想转换为单个列。如果您确实想要单独的列并且唯一阻碍您的是遗留代码,请考虑以下内容。

您可以为选项添加列并使用插入/更新触发器来填充它们,或者您可以创建一个将位拆分为单独列的视图。对于新的开发,您可以对新列进行编码。随着时间的推移,当您修改遗留代码时,您可以将其更改为新方法。当所有“读取”遗留代码都已更改后,最后一步是更改“写入”代码以使用新列而不是位列并删除触发器。

我有一个 SQL Fiddle在这里演示。请注意,为简洁起见,我只包含了一个插入触发器。

于 2013-07-17T13:09:27.417 回答