2012-08-08 83 views
0

首先,我不能重新导出这个数据,所以我被这个文件卡住了。为MySQL导入将十六进制数字转换为int

在下面发布的示例中,INT列的值为十六进制。我认为。像0X31这样的值需要导入为1.相反,它们导入为49.我猜这可能是ascii的等价物。我需要导入0x31作为1,0x32作为2,等等。我该怎么做?

我也可以用一个足够聪明的文本编辑器来搜索和替换这些值。我有数以千计的问号,所以我不想这样做手动例如搜索“0x31”替换为“1”。

这是进口样品。

REPLACE INTO 'qa_sharedevents' ('entitytype', 'entityid', 'questionid', 'lastpostid', 'updatetype', 'lastuserid', 'updated') VALUES ('Q', '1', 0x31, '1', '', '1', '2012-03-08 23:45:56'), ('U', '1', 0x31, '1', '', '1', '2012-03-08 23:45:56'), ('Q', '1', 0x31, '3', '', '', '2012-03-09 02:23:54'), ('T', '17', 0x31, '1', '', '1', '2012-03-08 23:45:56'), ('Q', '2', 0x32, '2', '', '1', '2012-03-09 01:28:36'), ('U', '1', 0x32, '2', '', '1', '2012-03-09 01:28:36'), ('Q', '2', 0x32, '2', 'E', '1', '2012-03-09 01:30:27'), ('U', '1', 0x32, '2', 'E', '1', '2012-03-09 01:30:27'),

+0

'0x31' *是*'49',而不是'1'。什么是替代标准?删除任何'0x3'的前缀? – 2012-08-08 16:26:44

+0

'0x31'是49,但'0x31'也是'1'的ASCII码,正如49中的十进制 – Ghost 2012-08-08 16:36:45

回答

2

尝试CHAR()功能:

mysql> select char(0x31), char(0x35); 
+------------+------------+ 
| char(0x31) | char(0x35) | 
+------------+------------+ 
| 1   | 5   | 
+------------+------------+ 
1 row in set (0.00 sec) 
0

你可以使用MySQL subtring功能。尝试在你的mysql客户端上看看它是如何工作的:

select substring('0x31', - 1,1);