sql怎么把字符型变成数值

老实说,在 SQL 中将字符转换为数字确实令人头疼。
但方法有很多,根据情况使用即可。

CAST 是最通用的。
我以前在MySQL中做过,改变工资字段什么的,超级简单。
只需一句话 CAST(salary AS DECIMAL(1 0,2 )) ,薪水就变成了一个数字。
但要小心,如果你的工资里有“abc”之类的东西,你就会被直接送进油炸锅。
当我测试它时,我差点把我的电脑弄坏了,因为错误消息太烦人了。

CONVERT 与 CAST 类似,但顺序相反。
我在 SQL Server 上使用了 CONVERT(INT,id),ID 变成了整数。
MySQL 也可以使用,但是 CONVERT from MySQL 也可以做一些技巧,例如:指定格式等。
我记得上次我为老板准备报告时。
我用它来将带有逗号的数字转换为标准十进制数字。
这非常实用。

特定于 Oracle 的是 TO_NUMBER。
说实话,Oracle 相当厉害,可以直接处理千位分隔符。
我之前在 Oracle 1 2 c 上尝试过 TO_NUMBER('1 ,000.5 0','9 ,9 9 9 .9 9 ') ,结果是 1 000.5 0。
如果使用得好,这个功能可以省去很多麻烦。

SQLServer也有NUMERIC,不过这个东西不常用。
我记得上次和同事谈起这个问题时,他建议直接使用CAST,并说没有必要使用NUMERIC。
但是,如果您确实想使用它,请使用 NUMERIC(1 0,2 ,price),其中可以指定精度和小数位。

要记住的重要要点。
转换之前必须确保它是一个数字,并且不能弄乱它。
例如,“1 2 3 ”可以,而“abc”绝对不行,会出现错误。
精度也是给定的,如 CAST('3 .1 4 1 5 9 ' AS DECIMAL(3 ,2 )),结果变为 3 .1 4 ,并且小数位丢失。
不同的数据库的功能也不同。
MySQL/PostgreSQL可以使用CAST或者CONVERT,Oracle需要使用TO_NUMBER,SQL Server的NUMERIC基本不用。

如果数据比较混乱并且包含非数值数据,则需要添加过滤器。
我尝试使用 MySQL 并使用 CASE WHEN Salary REGEXP '^[0-9 ]+(.[0-9 ]+)?$' THEN CAST(salary AS DECIMAL(1 0,2 )) ELSE NULL END AS Converted_salary。
这样,当纯数转换为数字时,如果不是,则保持为空。
这个写法我想了很久,终于想通了。

总之,将字符转换为数字的方法有很多种。
关键要看用的是哪个数据库,涉及到什么数据。
你尝试得越多,你就会越习惯。

sql怎么把字符串转换为数字?

结论:要查询amount列是否符合SQL中的小数规范,请使用cast(amount asdecimal(1 0,4 )) > 5 00或converter(decimal(1 0,4 ), amount) > 5 00。
将字符串数字转换为数字: 方法一:SELECT CAST('1 2 3 ' AS INTEGER); 方法二:SELECT CONVERT('1 2 3 ',Signed); 方法三:选择“1 2 3 ”+0; 扩展: 将字母转换为数字:是。
将数字转换为字符:精确值可直接转换;近似值可能会更烦人。
如: 确切地说:声明@i int set @i = 1 2 3 4 5 6 7 8 9 print "test:" + Convert(varchar(2 0), @i) 输出:test: 1 2 3 4 5 6 7 8 9 粗略地说:声明@i float set @i = 1 2 3 4 5 6 7 8 9 print "test:" + Convert(varchar(2 0), @i) 输出:test: 1 .2 3 4 5 7 e+008

SQL中字符串转换成数值

结论:数据类型转换函数非常实用。

ASC(“什么”):8 7 使用字符串第一个字母的 ASCII 代码,“w”为 8 7
CHR(8 7 ): 'w'。
将 ASCII 代码 8 7 转换为字母“w”。

STR(3 .1 4 1 5 , 6 , 2 ): '3 .1 4 '。
将 3 .1 4 1 5 转换为 6 位长且保留 2 位小数的字符串。

VAL(“1 2 3 ”):1 2 3 .00。
将字符串“1 2 3 ”转换为数值并自动添加小数点,结果为 1 2 3 .00。

CTOD('November 1 , 2 002 '):2 002 年 1 1 月 1 日。
将字符串 '1 1 /01 /2 002 ' 转换为日期。

DTOC(DATE()):示例:“1 1 /01 /2 002 ”。
将日期转换为字符串格式。

DTOS(DATE()):示例:“2 002 1 1 01 ”。
日期将转换为不带分隔符的年、月、日字符串。

CTOT('1 1 /01 /2 002 1 0:3 0:5 0am'):1 1 /01 /2 002 1 0:3 0:5 0am。
将字符串转换为日期和时间类型。

DTOT(DATE()):示例:'1 1 /2 5 /2 001 00:00:01 am'。
Date-日期/时间类型,默认时间。

TTOC(DATETIME()):示例:'1 1 /2 5 /2 001 00:00:01 am'。
将日期和时间转换为字符串。

TTOD(DATETIME()):示例:'1 1 /2 5 /2 001 '。
将日期和时间转换为日期类型。

IIF(A>0, "是", "否"):是。
如果 A 大于 0,则返回“YES”,否则返回“NO”。

自己掂量一下。

Sql中有没有把字符串转换成int数值类型

啊,我在使用CAST函数的时候真的陷入了陷阱。
我记得有一年我正在帮助一家公司准备一份报告。
一位老人给了我包含数字与字母和符号混合的字符串的数据,例如“1 2 3 abc”和“4 5 6 ”。
结果我直接用CAST转换成整数,但是直接报了很多错误。
我花了很长时间才发现这些人的数据很糟糕。
正如您所看到的,除了数字和小数点之外,CAST 无法识别字符串中的任何内容。
那一年,我经历了几天的艰难,最终不得不手动更改它们。
他们说这麻烦不麻烦。

另外一个项目,数据量太大。
有一个字段以字符串形式存储金额。
该数字后跟几个零,例如“1 2 3 4 5 6 7 8 9 01 2 3 4 5 6 7 8 9 0”。
结果,当我使用 CAST 将其转换为整数时,立即发生溢出。
当数据最终为负数时,我感到震惊。
我们当时用的是Oracle,我记得范围就那么大。
因此,应注意该值是否太大或太小。
你无法仅仅通过思考来改变它。
您需要确保范围正确。
那年项目差点失败,幸好我及时学习,将SQL语句改成了使用更广泛的类型。

所以,在使用CAST函数时,一定要清楚地了解字符串,而不能只看它的外观。
不允许有太多的数字和小数点。
您还需要知道数值范围。
否则,小问题可能会酿成大问题。
这十年来,我因为不明白这两点而受了很多苦。
我需要提醒自己,不要再像以前那样傻了。