首页 > 解决方案 > 如何从 varchar 转换为 float 并忽略非数字字符?

问题描述

我正在尝试将 varchar(500) 中的列转换为在我的 sql 中浮动。我的代码目前如下所示:

select distinct(customer_id), cast(val_amt as float) from(
select prsn_real_gid, vital_nam, vital_performed_date,
case when val_amt ~'^[0-9]+' then val_amt else null end as val_amt from my_table);

但我收到以下错误消息

[Amazon](500310) Invalid operation: Invalid digit, Value 'X', Pos 2, Type: Double 
Details: 
 -----------------------------------------------
  error:  Invalid digit, Value 'X', Pos 2, Type: Double 
  code:      1207
  context:   1.XYXY04
  query:     4147
  location:  :0
  process:   query0_118_4147 [pid=0]
  -----------------------------------------------;
1 statement failed.

例如,我的数据如下所示:

customer_id  |  val_amt
111  | 23.45
112  | 21
113  | x
114  | /
115  | 

它有字母字符、符号和空值。我只想要包括小数在内的数字。

标签: mysqlsql

解决方案


有时演员会给我带来麻烦。甚至 Try_Cast()。这可能对您的需要有好处。编辑:您从 SQLServer 更改为 MySQL。针对 MySQL 进行了调整

select distinct customer_id, convert(`val_amt`, float(2,2))
from my_table
where convert(`val_amt`,float(2,2)) is not null;

推荐阅读