更新数据并强制转换为新数据类型

Updating data and casting to new datatype

提问人:beth_9 提问时间:9/23/2023 最后编辑:lemonbeth_9 更新时间:9/23/2023 访问量:75

问:

我正在使用 Google BigQuery 来分析示例电影数据。

电影评分在数字和小数点之间存储有空格,因此当我更新CSV文件时,Google BigQuery将它们存储为.我的目标是首先删除空格,然后将数据类型更改为 .STRINGFLOAT

我使用以下查询删除了空格:

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

但是,我不确定之后如何更改数据类型,修改原始表。

谁能帮我解决这个问题?

sql google-bigquery 转换 sql-update

评论


答:

2赞 lemon 9/23/2023 #1

您可能希望使用 here 而不是语句,并使用 将字符串解析为数字并更新列数据类型:SELECTUPDATEPARSE_NUMERIC

UPDATE Movies.Movies_Showtime
SET Movie_Rating = PARSE_NUMERIC(REPLACE(Movie_Rating, ' ', ''))

关于为什么最好用 datatype 而不是 datatype 来存储数据的一些提示NUMERICFLOAT

评论

0赞 beth_9 9/23/2023
谢谢你的评论!但是,我可以使用没有 WHERE 子句的 UPDATE 语句吗?
0赞 lemon 9/23/2023
是的,不使用子句时的唯一区别是所有记录都会更新。WHERE
1赞 Roar S. 9/23/2023 #2

另一种方法是使用 而不是 。 如果无法强制转换值,将返回。SAFE_CASTUPDATESAFE_CASTnull

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