Oracle怎样把varchar2型转成number型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle怎样把varchar2型转成number型相关的知识,希望对你有一定的参考价值。

oracle中把varchar2转成number类型的方法是用to_number函数来完成。
使用TO_NUMBER函数将字符转换为数字
To_number函数的格式如下:
TO_NUMBER(char[, \'格式\'])
举例:

SQL> select to_number(’RMB234234.4350′,’L999999.0000′) from dual;
TO_NUMBER(’RMB234234.4350′,’L999999.0000′)
——————————————

234234.435
SQL> select to_number(’$123,233,455,623.3400′,’$999,999,999,999.0000′) from dual;
TO_NUMBER(’$123,233,455,623.3400′,’$999,999,999,999.0000′)
———————————————————-

1.2323E+11
参考技术A to_char
to_date
to_number
实现数字,字符串,日期之间的转换

char *怎样转成int

例如:char * data = "3210";
转化后的int值 是0x1032的十进制值。求指导

char*怎样无法转成int,int可以转成char*。

1.首先,在python命令窗口中键入int(12,2)。结果是一个错误。

2.改为24589。

3.将int()方法中的第一个参数字符串的数量更改为0和1。

4.如果希望将字符串转换为八进制数,请使用int()方法并传递第二个参数8。

5.将字符串值转换为decimal,将第二个参数传递给2,并返回相同的结果。

6.如果希望将字符串中的值转换为十六进制,并且字符串中的值不能超过常值。

参考技术A char *转int
也就是字符串转换为整数,这个是一个挺常用的功能了
对于十进制数,直接用atoi或者linux下支持的stringtoul一类的就可以
比如你说的"3210"用这类函数,就可以直接转成10进制的3210

不过,按照你说的3210转换成16进制的0x1032这个就不能算是常规转换了,转成同值16进制不说,高低位也反过来了
这个就比较麻烦,需要自己写转换函数

具体的方法,需要看你的转换规则
基本思路都是一样的
逐位读取字符串中的字符,并转换成对应16进制字符,比如'3'->0x3 'A'-> 0xa 'a'->0xa
等等
得到这些字符后,按照你需要的顺序,重排。 用移位(>> <<)加位或(|)操作可以做到
由于无法判断具体的转换规则 没办法给出通用的代码

对于"3210"->0x1032可以给一个参考例子

char *data = "3210";
int result = 0;
int j;
char buffer[5];
strcpy(buffer, data);//data是常量字符串,无法改变值,放到buffer里操作
for(j = 0; j <4; j ++)

if(buffer[j] <= '9' && buffer[j] >= '0')
buffer[j] -= '0';
else if(buffer[j] <= 'F' && buffer[j] >= 'A')
buffer[j] -= 'A'-0xa;
else if(buffer[j] <= 'f' && buffer[j] >= 'a')
buffer[j] -= 'a'-0xa;
else printf("unknow char %c\n", buffer[j]);

result = (buffer[2]<<12)|(buffer[3]<<8)|(buffer[0]<<4)|buffer[1];
printf("result is 0x%4x\n", (unsigned)result);

供参考 望有帮助本回答被提问者采纳
参考技术B 你是强制转换吗?
0x1032是16进制啊,10进制的数据总么会有0x呢?
如果你是进行的强制转换,那结果一定是错的,因为字符和整数进行转换都是按ASCII编码进行转换的。ASCII中只有单个字符的编码,字符串要被转换为整型都需要单个单个的进行转换。
但很多时候,我们要将一个数字型的字符串转换为相对应的整型数据,这要总么转呢。强制转换一定是不行的,因为强制转换按内存模型来匹配的,只是将一个数据的内存套到要转换的数据内存中。
这时候我们就要用相应的算法来处理,至于这个算法有很多,由于本人水平有限,还是不给你现丑了,这里我告诉你几个库函数,这些库函数在stdlib.h头文件中
1. float atof(const char *str);:字符串转浮点型函数,即将一个"123.12"转换为float类型的123.12
2. int atoi(const char *str); 字符串转整型函数
3. long atol(const char *str); 字符串转长整型函数

这里给你一个示例吧:

#include <stdio.h>
#include <stdlib.h>
int main(void)

char *str="12345.67";
long result;
result=atol(str);
printf("string=%s\nlong =%ld\n",str,result);
getch();
return 0;

//这个示例是将一个char *str="12345.67";类型的数据转换为对应的浮点类型数据追问

那个0x1032中的0x我只是说明是十六进制,是不是没有这样转换的函数?

追答

        10进制转为16进制有什么难的呢?网上有大量进制转换函数代码,随便找一个加进去就可以了。如果只是要在输出时转换为16进制,库中有很多格式化输出函数,printf就可以进行格式转换输出。

        另外进制是可以进行隐式的转换的,看下图(是用C++的代码)

//由此可以见你只要将这个数以16进制赋给一个整型变量,系统可以自动转换为一个10进制的数。

参考技术C

主要使用atoi函数,具体如下:

为验证x确实是整型,还计算了1234567+1=1234568,具体如上!

参考技术D #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()


char * data = "3210";

int int_data[4];
int hex_data;
int length;

char *c;
c = data;
int i;

length = strlen(data);

if(length!=4)

printf("the string must be four\n");
exit(0);



for(i = 0;i < length;i++)

int_data[i] = int(*c -'0');
c++;

printf("%d\n",int_data[i]);


hex_data = int_data[2] *pow(16.0,3) + int_data[3]*pow(16.0,2) + int_data[0] *pow(16.0,1)+ int_data[1];

printf("0x%x ====%d(10)\n",hex_data,hex_data);

return 0;

以上是关于Oracle怎样把varchar2型转成number型的主要内容,如果未能解决你的问题,请参考以下文章

Oracle怎样把varchar2型转成number型

C语言中怎么把Int型转成字符型?

怎么把一个object 型转成 键值对呢? 如 我要做个统一的插入 Add(object obj) ....

oracle中clob可以转成varchar2吗

Oracle中表列由VARCHAR2类型改成CLOB

oracle 怎么把clob转换成string pb