提问人:beth_9 提问时间:9/23/2023 最后编辑:lemonbeth_9 更新时间:9/23/2023 访问量:75
更新数据并强制转换为新数据类型
Updating data and casting to new datatype
问:
我正在使用 Google BigQuery 来分析示例电影数据。
电影评分在数字和小数点之间存储有空格,因此当我更新CSV文件时,Google BigQuery将它们存储为.我的目标是首先删除空格,然后将数据类型更改为 .STRING
FLOAT
我使用以下查询删除了空格:
SELECT *, REPLACE(Movie_Rating, ' ', '') AS Movie_Rating_Updated
FROM Movies.Movies_Showtime
这只是整个数据的一部分:
Movie_Name | Movie_Rating | Movie_Rating_Updated |
---|---|---|
搏击俱乐部 | 8 .8 | 8.8 |
《辛德勒的名单》 | 8 .9 | 8.9 |
但是,我不确定之后如何更改数据类型,修改原始表。
谁能帮我解决这个问题?
答:
2赞
lemon
9/23/2023
#1
您可能希望使用 here 而不是语句,并使用 将字符串解析为数字并更新列数据类型:SELECT
UPDATE
PARSE_NUMERIC
UPDATE Movies.Movies_Showtime
SET Movie_Rating = PARSE_NUMERIC(REPLACE(Movie_Rating, ' ', ''))
关于为什么最好用 datatype 而不是 datatype 来存储数据的一些提示。NUMERIC
FLOAT
评论
0赞
beth_9
9/23/2023
谢谢你的评论!但是,我可以使用没有 WHERE 子句的 UPDATE 语句吗?
0赞
lemon
9/23/2023
是的,不使用子句时的唯一区别是所有记录都会更新。WHERE
1赞
Roar S.
9/23/2023
#2
另一种方法是使用 而不是 。 如果无法强制转换值,将返回。SAFE_CAST
UPDATE
SAFE_CAST
null
WITH
Movies_Showtime AS (
SELECT
"Fight Club" AS Movie_Name,
'8 .8' AS Movie_Rating
UNION ALL
SELECT
"Schindler's List",
'8 .9'
UNION ALL
SELECT
"Some other movie with invalid rating",
'abc'
)
SELECT
*,
SAFE_CAST(REPLACE(Movie_Rating, ' ', '') AS NUMERIC) AS Movie_Rating_Updated
FROM
Movies_Showtime
评论