在我的查询中,我有一个格式为美元金额的值,如下所示:
Coverage_Amount
$10,000
$15,000
null
$2,000
所以我删除多余的字符并将null映射到0.我得到一个像这样的列:
Coverage_Amount
10000
15000
0
2000
但是,这些值存储为字符串,当我尝试这样的事情时:
CASE
WHEN Coverage_Amount IS NOT NULL THEN INTEGER(REGEXP_REPLACE(query.Coverage_Amount, r'\$|,', ''))
ELSE 0
END AS Coverage_Amount
我回来了
Coverage_Amount
null
null
0
null
INTEGER()
功能的文档说
将expr转换为64位整数。如果是不与整数值对应的字符串,则返回NULL。
我能做些什么来让BigQuery认识到这些实际上是整数吗?
答案 0 :(得分:3)
以下两个版本的BigQuery(相应的Legacy SQL和StandardSQL)都可以工作并返回结果
Coverage_Amount val
10000 10000
15000 15000
2000 2000
旧版SQL
#legacySQL
SELECT
Coverage_Amount,
IFNULL(INTEGER(REGEXP_REPLACE(Coverage_Amount, r'\$|,', '')), 0) AS val
FROM
(SELECT '10000' Coverage_Amount),
(SELECT '15000' Coverage_Amount),
(SELECT '2000' Coverage_Amount)
标准SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT '10000' Coverage_Amount UNION ALL
SELECT '15000' UNION ALL
SELECT '2000'
)
SELECT
Coverage_Amount,
IFNULL(CAST(REGEXP_REPLACE(Coverage_Amount, r'\$|,', '') AS INT64), 0) AS val
FROM `project.dataset.table`
显然,同样适用于'$ 15,000'和'$ 10,000'以及'$ 2,000'等。
答案 1 :(得分:1)
您使用标准版吗?这对我有用(注意我使用CAST
运算符):
WITH data as(
select "$10,000" d UNION ALL
select "$15,000" UNION ALL
select "$2,000")
SELECT
d,
CAST(REGEXP_REPLACE(d, r'\$|,', '') AS INT64) AS Coverage_Amount
FROM data
答案 2 :(得分:1)
可能是因为你在字符串末尾的0之后有空格。
我的意思是f.e. '& 10000'。所以你可以尝试使用RTRIM(值,'')
angular.forEach($scope.cart, (item) => item.orderNumber = $scope.OrderNumber)
删除字符串末尾的所有空格
然后输出将是:
SELECT
Coverage_Amount,
IFNULL(INTEGER(REGEXP_REPLACE(RTRIM(Coverage_Amount, ' '), r'\$|,', '')),0) AS val
FROM
(SELECT '$10,000 ' Coverage_Amount)