在BigQuery中将东部阿拉伯数字转换为西部阿拉伯

时间:2018-10-12 06:33:55

标签: google-bigquery

我有一个问题,其中东部阿拉伯数字作为时间戳输入到我的表中,而bigquery无法将其识别为时间戳,并且不会执行我的查询。

我希望能够进行转换:

'٢٠١٨-١٠-١١T١٦:٠١:٤١.٠٤١Z'

对此:

'2018-10-11T16:01:41.041Z

在bigquery中,这可能吗?

2 个答案:

答案 0 :(得分:3)

如何处理此SQL UDF:

CREATE TEMP FUNCTION arabicConvert(input STRING) AS ((
  SELECT STRING_AGG(COALESCE(FORMAT('%i', i), letter), '')
  FROM (SELECT SPLIT(input, '') x), UNNEST(x) letter
  LEFT JOIN (SELECT letter_dict,i FROM (
    SELECT SPLIT('٠١٢٣٤٥٦٧٨٩', '') l), UNNEST(l) letter_dict WITH OFFSET i
  )
  ON letter=letter_dict
));

SELECT arabicConvert('٢٠١٨-١٠-١١T١٦:٠١:٤١.٠٤١Z') converted


2018-10-11T16:01:41.041Z

答案 1 :(得分:1)

还有其他更轻松的选择:o)

   
CREATE TEMP FUNCTION arabicNumeralsConvert(input STRING) AS ((
    CODE_POINTS_TO_STRING(ARRAY(
      SELECT IF(code > 1600, code - 1584, code) 
        FROM UNNEST(TO_CODE_POINTS(input)) code
    )) 
)); 
WITH t AS (
    SELECT '٢٠١٨-١٠-١١T١٦:٠١:٤١.٠٤١Z' str UNION ALL
    SELECT '2018-10-12T20:34:57.546Z'
)
SELECT str, arabicNumeralsConvert(str) converted
FROM t 

结果与

  
str                          converted
٢٠١٨-١٠-١١T١٦:٠١:٤١.٠٤١Z    2018-10-11T16:01:41.041Z
2018-10-12T20:34:57.546Z     2018-10-12T20:34:57.546Z