Конвертировать восточные арабские цифры в западные арабские в BigQuery - PullRequest
0 голосов
/ 12 октября 2018

У меня проблема с тем, что восточно-арабская цифра вошла в мою таблицу как отметка времени, а bigquery не распознает ее как отметку времени и не выполнит мои запросы.

Я хочу иметь возможность преобразовать это:

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

в это:

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

в bigquery, это возможно?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Есть альтернатива, более легкая опция: 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
0 голосов
/ 12 октября 2018

Как насчет этого 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...