7

我有一些以表格形式提供给我的数字数据INTEGER。我将它与其他数据一起插入到 SQLite 中,但是当我写出来时,INTEGER数字需要是Hex带有前导零的 8 位数字。

前任。

输入

400 
800 
25 
76

输出

00000190 
00000320 
00000019 
0000004C

最初我在读入它们并TEXT像这样存储它们时正在转换它们。

stringstream temp;
temp << right << setw(8) << setfill('0') << hex << uppercase << VALUE;

INTEGER但是生活从来都不是一件容易的事,现在我必须以not的形式创建第二个输出HEX。有没有办法将INTEGER数字转换为SQLite 中的数字HEXHEX数字?INTEGERS

我想避免在 SQLite 中使用 C++ 来更改数据,因为我编写了一些修道院导出函数,它们获取查询结果并将它们打印到文件中。如果我需要在查询返回期间触摸数据,我将无法使用它们。

我查看了HEX()SQLite 中的函数,但没有得到想要的结果。我可以做一个函数还是效率很低?我正在对一个非常大的数据集执行此操作,因此应该避免任何昂贵的事情。

注意:我在 Visual Studios 2010 中使用 SQLites C/C++ 接口。

4

3 回答 3

20

您可以使用 sqlite3 printf() 函数:

CREATE TABLE T (V integer);
insert into T(V) values(400), (800), (25), (76);
select printf('%08X', V) from T;
于 2015-07-31T12:57:08.673 回答
2

您可以使用sqlite3_create_function. 看一个例子

于 2014-04-07T14:03:09.647 回答
1

好吧,这不是我最喜欢的答案,我决定在表中添加一个作为 INTEGER 值的列。

如果有人找到更好的方法来做到这一点,我会全力以赴。

编辑:

在实现了这个答案并查看了它对程序的影响之后,这似乎是一种在不增加运行时负载的情况下获取数据的好方法。这个答案确实增加了数据库的大小,但它不需要任何额外的处理来从 SQLite 获取值,因为这只是在查询中获取不同的列。

另外因为我有这些值开始,这个答案通过将它们添加到表格中而不是稍后处理来获得我在程序早期通过的值,从而节省了巨大的成本。

于 2013-01-12T03:56:26.437 回答