Google bigquery 是否有isnumeric的BigQuery版本

Google bigquery 是否有isnumeric的BigQuery版本,google-bigquery,Google Bigquery,我需要测试一个字段是数字还是没有在BigQuery中使用标准SQL 下面的示例很有效,与我在Cognos中使用TRANSLATE所做的类似(“mystring”、“1234567890.”、“”),但它不是很优雅 SELECT IF(LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('1234.56','1',''),'2',''),'3',''),'4',

我需要测试一个字段是数字还是没有在BigQuery中使用标准SQL

下面的示例很有效,与我在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')
但是它不是很优雅

下面是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`

您可以使用
SAFE\u CAST
尝试对数字进行强制转换<代码>安全强制转换强制转换类似于
强制转换
,但如果强制转换失败,将返回而不是错误
null

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

SAFE_CAST('1234567890' AS FLOAT64);

它将返回
1.23456789E9

谢谢这两个建议,两个建议都很有效,我选择了SAFE_CAST选项,因为它运行速度快了一小部分

#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(SAFE_CAST(col AS FLOAT64) is null,'Not a number', 'A number')
 FROM `project.dataset.table`