首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“万”在哪里?[整数的输入语法无效:"1.1万"]

“万”在哪里?[整数的输入语法无效:"1.1万"]
EN

Stack Overflow用户
提问于 2021-07-23 06:43:22
回答 2查看 207关注 0票数 0

我们正在建立一个数据处理平台,并使用Greenprie6.8.1作为后端数据库。

在我们的平台中,有一个“清洁”操作,用户可以以一些有意义的方式处理他们上传的数据集,比如拆分列、强制转换和过滤等等。但是最近在整个过程中发生了一些不寻常的事情。

顺便说一句,每个用户的操作都会在Greenplum中创建一个视图。该视图将根据他/她的最后一步操作结果创建。

例如,用户AA上传了这样的数据集。"dataset.s_249_1626934066746“(有1969年的行,还有do有"万") 数据集截图

您可以使用此脚本创建此表。1626934066746 SQL

顺便说一句,用户AA想要找到一组受欢迎的项目(排名最高的项目)。因此,AA有以下操作。

AA使用"人“将列"评价人数”(表示等级的数字)拆分为"评价人数_拆分1",AA可以得到一个新的伪数学意义列"评价人数_拆分1“。

由于"评价人数“中的数据模式为num + "人”+ "rated“(例如1.1万人评分=1.1万(中文10,000标记)+人+评分)

所以在后端,我们创建了这样一个视图

代码语言:javascript
复制
CREATE VIEW pipeline.view_tclean_19280_1627009588360 AS select split_part("评分人数", '人', 1) as "评分人数_拆分1",* from dataset.s_249_1626934066746

第一步快照

由于在"评价人数_拆分1“中,仍然有一些行包含”万“(中文10,000标记),无法进行比较,因此AA只是删除了它。

代码语言:javascript
复制
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类型。

代码语言:javascript
复制
CREATE VIEW pipeline.view_tclean_19280_1627009588419 AS SELECT CAST("评分人数_拆分1" as bigint),"pub_info","评分","name","播放弹幕追番","url","评分人数","_record_id_" FROM pipeline.view_tclean_19280_1627009588402 

第三步快照

现在,当AA选择那些大于3000的评级数字时,出现了一个例外。

代码语言:javascript
复制
select * from pipeline.view_tclean_19280_1627009588419 where "评分人数_拆分1" > 3000 --invalid input syntax for integer: "1.1万"

整数的无效输入语法:"1.1万“

为什么?“万”在哪里?所以很奇怪为什么"万“仍然存在于某些地方。

=============================================

有些人像我一样,试图找出问题,我们发现如果我们继续将列"评分人数_拆分1“转换为十进制类型,然后再次执行select查询,它就会再次工作。

代码语言:javascript
复制
CREATE VIEW pipeline.view_tclean_19280_1627009588437 AS SELECT CAST("评分人数_拆分1" as decimal),"pub_info","评分","name","播放弹幕追番","url","评分人数","_record_id_" FROM pipeline.view_tclean_19280_1627009588419 

然后

代码语言:javascript
复制
select * from pipeline.view_tclean_19280_1627009588437 where "评分人数_拆分1" > 3000 --works (first convert INT, then DECIMAL)

为什么?我的"万“在哪里?

为什么会起作用

================================================

我们尝试了另一种方法,如果我们直接将列"评分人数_拆分1“转换为十进制类型,它再次失败。

代码语言:javascript
复制
CREATE VIEW pipeline.view_tclean_19280_1627009588439 AS SELECT CAST("评分人数_拆分1" as decimal),"pub_info","评分","name","播放弹幕追番","url","评分人数","_record_id_" FROM pipeline.view_tclean_19280_1627009588402 

并对类型数值引发相同的错误无效输入语法:"1.1万“

代码语言:javascript
复制
select * from pipeline.view_tclean_19280_1627009588439 where "评分人数_拆分1" > 3000 --invalid input syntax for type numeric: "1.1万" 

我想哭。

所有sql都可以从这里获得,比如SQL

EN

回答 2

Stack Overflow用户

发布于 2021-07-23 07:10:21

是的,这值得一哭。

您可以从视图(而不是表)中选择:

代码语言:javascript
复制
CAST("评分人数_拆分1" as bigint)

这意味着当您从视图中进行选择时,将完成真正的强制转换。

你看到的错误说"评分人数_拆分1“有一些类似于"1.1万”的东西,不能抛给bigint。

您可能应该编写一个sql函数来将这样的字符串转换为bigint。然而,这是你的工作,这里的人只会给你方向,而不会为你做。

票数 1
EN

Stack Overflow用户

发布于 2021-07-23 09:57:17

LOL,

我不知道为什么,但它有效。

代码语言:javascript
复制
select * from pipeline.view_tclean_19280_1627009588419 where "评分人数_拆分1" > 3000::numeric
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68495052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档