是否有BigQuery版本的数字

Ste*_*eve 1 google-bigquery

我需要测试BigQuery中的字段是否为数字或不使用标准SQL。

以下示例可以正常工作,类似于我在IBM Cognos中使用TRANSLATE('mystring','1234567890。','')所做的操作,但它不是很优雅。

SELECT
IF(LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('1234.56','1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9',''),'0',''),'.',''))=0,
'A number',
'Not a number')
Run Code Online (Sandbox Code Playgroud)

ala*_*oot 7

您可以SAFE_CAST用来尝试强制转换为数字。SAFE_CAST强制转换与相似CAST,但如果强制转换失败,null则返回errr 。

例如,您可以执行以下操作:

SAFE_CAST('1234567890' AS FLOAT64);
Run Code Online (Sandbox Code Playgroud)

它将返回 1.23456789E9


Mik*_*ant 2

但它不是很优雅

以下是 BigQuery 标准 SQL 的示例

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1234.56' col UNION ALL
  SELECT '1234.' col UNION ALL
  SELECT '1234' col UNION ALL
  SELECT '.56' col UNION ALL
  SELECT '1234..56' col UNION ALL
  SELECT 'a1234.56' 
)
SELECT
  col,
  IF(LENGTH(REGEXP_REPLACE(col, r'[\d.]', '')) = 0, 'A number', 'Not a number') ,
  IF(REGEXP_CONTAINS(col, r'^\d*.?\d*$'), 'A number', 'Not a number') 
FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)