我最近一直在学习bit string
数据类型,我很好奇:
在这个文档页面的底部有一句话:
...加上 5 或 8 个字节的开销,具体取决于字符串的长度
在其他语言(如 PHP、Java、C#、C++ 等)中,如何通过 Npgsql、ODBC 等驱动程序处理位字符串?
对于问题 #1,使用 smallint 或 bigint 将提高存储效率,并且可能会提供性能提升,因为在任何地方都支持整数。大多数编程语言都可以轻松处理整数的位操作。如果是这样,那么引入位串数据类型的意义何在?是否仅适用于需要大量位掩码的情况?位域索引可能吗?我对 PostgreSQL 中如何进行位域索引比较好奇。
对于#2,我很困惑,不仅仅是好奇。例如,如果我将工作日位掩码存储在 bit(7) 字段中,一天一位,最低位代表星期一。然后我在 PHP 和 C++ 中查询该值。我会得到什么?文档说我会有一个位串,但是位串不是我可以直接使用的 - 就像整数一样。那么在这种情况下,我应该放弃位域吗?
任何人都可以详细说明为什么以及何时应该使用一点或一点变化?
抱歉这个毫无意义的标题,但我想不出更好的标题。我正在使用 Oracle 11g r2。
以下查询引发 ORA-00932 错误:
SELECT BBB.FIELD1 FROM TABLE0 AAA
JOIN (SELECT * FROM (SELECT AAA.*, RANK() OVER (PARTITION BY SUBSTR(FIELD1,1,1) ORDER BY SUBSTR(FIELD1,1,1),ROWNUM) AS RANK
FROM TABLE1@DBLINK AAA WHERE UPPER(NAME)!='XXX')
WHERE RANK<=1) BBB ON CAST(CAST(CAST(SUBSTR(BBB.FIELD1,2,LENGTH(BBB.FIELD1)-2) AS NUMBER) AS VARCHAR2(10))||SUBSTR(BBB.FIELD1,LENGTH(BBB.FIELD1)) AS VARCHAR2(4000))=CAST(CAST(CAST(SUBSTR(AAA.FIELD0,2,LENGTH(AAA.FIELD0)-2) AS NUMBER) AS VARCHAR2(10))||SUBSTR(AAA.FIELD0,LENGTH(AAA.FIELD0)) AS VARCHAR2(4000));
Run Code Online (Sandbox Code Playgroud)
但是,以下查询完全正常。
SELECT * FROM TABLE0 AAA
JOIN (SELECT * FROM (SELECT AAA.*, RANK() OVER (PARTITION BY SUBSTR(FIELD1,1,1) ORDER BY SUBSTR(FIELD1,1,1),ROWNUM) AS RANK
FROM TABLE1@DBLINK AAA WHERE UPPER(NAME)!='XXX')
WHERE RANK<=1) BBB …
Run Code Online (Sandbox Code Playgroud)