如何解决“万”在哪里?[整数的无效输入语法:“1.1万”]
我们正在构建一个数据处理平台,并使用Greenplum 6.8.1作为后端数据库。
在我们的平台中,有一个“Clean”动作,用户可以通过一些有意义的方式来处理他们上传的数据集,例如拆分列、转换和过滤等。但是在整个过程中发生了一些不寻常的事情,最近。
顺便说一下,每个用户的操作都会在Greenplum中创建一个视图。该视图将根据他/她的最后一步操作结果创建。
例如,用户 AA 上传了这样的数据集。 “dataset.s_249_1626934066746”(有 1969 行,有“万”) Dataset Screenshot
您可以使用此脚本创建此表。 s_249_1626934066746 SQL
顺便说一句,用户 AA 想找到一组受欢迎的项目(评分最高的项目)。所以AA有以下这些操作。
AA用“人”将“评价人数”列(即评价人数)拆分成“评价人数_拆分1”,AA可以得到新的伪数学意义专栏“评价人数_分离1”。
因为《评价人群》的数据模式是num+“人”+“评分”(例如1.1万人评分=1.1万(中国10000分)+人+评分)
所以在后端,我们创建了一个这样的视图
CREATE VIEW pipeline.view_tclean_19280_1627009588360 AS select split_part("评分人数",'人',1) as "评分人数_拆分1",* from dataset.s_249_1626934066746
由于在“评价人数_拆分1”中,仍有部分行包含“万”(中文10000标记),无法比较,所以AA就删掉了。
CREATE VIEW pipeline.view_tclean_19280_1627009588402 AS SELECT "评分人数_拆分1","pub_info","评分","name","播放弹幕追番","url","评分人数","_record_id_" FROM pipeline.view_tclean_19280_1627009588360 WHERE ("评分人数_拆分1" !~ E'万' OR "评分人数_拆分1" IS NULL) OR "评分人数_拆分1" = ''
它可以工作,整个视图只有1756行,所有包含“万”的行都消失了。
现在,AA想把“聚合人数_拆分1”列转换成数字类型,以便AA以后可以做一些过滤。
在后端,我们将其转换为 bigint 类型。
CREATE VIEW pipeline.view_tclean_19280_1627009588419 AS SELECT CAST("评分人数_拆分1" as bigint),"_record_id_" FROM pipeline.view_tclean_19280_1627009588402
现在,当 AA 选择那些大于 3000 的评级数字时,会引发异常。
select * from pipeline.view_tclean_19280_1627009588419 where "评分人数_拆分1" > 3000 --invalid input syntax for integer: "1.1万"
invalid input syntax for integer: "1.1万"
为什么? “万”在哪儿?好奇怪为什么有些地方还存在“万”。
==============================================>
有的人和我一样,想找问题,发现如果继续把“评分人数_拆分1”列转换成十进制类型,再做select查询,又可以了。
CREATE VIEW pipeline.view_tclean_19280_1627009588437 AS SELECT CAST("评分人数_拆分1" as decimal),"_record_id_" FROM pipeline.view_tclean_19280_1627009588419
然后
select * from pipeline.view_tclean_19280_1627009588437 where "评分人数_拆分1" > 3000 --works (first convert INT, then DECIMAL)
为什么?我的“万”呢?
================================================ =
然后我们尝试了另一种方法,如果直接将“评分人数_拆分1”列转换为十进制类型,则再次失败。
CREATE VIEW pipeline.view_tclean_19280_1627009588439 AS SELECT CAST("评分人数_拆分1" as decimal),"_record_id_" FROM pipeline.view_tclean_19280_1627009588402
并引发了相同的错误类型数字无效输入语法:“1.1万”
select * from pipeline.view_tclean_19280_1627009588439 where "评分人数_拆分1" > 3000 --invalid input syntax for type numeric: "1.1万"
我想哭。
所有 sql 都可以从这里获得,例如 SQL
解决方法
是的,这值得哭。
您从视图而非表格中选择:
CAST("评分人数_拆分1" as bigint)
这意味着当您从视图中进行选择时,就完成了真正的转换。
你看到的错误是“评分人数_拆分1”有类似“1.1万”的内容,无法转换为bigint。
您也许应该编写一个 sql 函数来将这样的字符串转换为 bigint。然而这是你的工作,这里的人只会给你方向,不会为你做。
,哈哈,
我不知道为什么,但它有效。
select * from pipeline.view_tclean_19280_1627009588419 where "评分人数_拆分1" > 3000::numeric
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。