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进制的数。
主要使用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型的主要内容,如果未能解决你的问题,请参考以下文章