Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用数组元素设置变量_Sql_Google Bigquery - Fatal编程技术网

Sql 使用数组元素设置变量

Sql 使用数组元素设置变量,sql,google-bigquery,Sql,Google Bigquery,我有一个包含应用程序版本(v1.1.1、v1.1.2、v1.10.1等)的表。 使用REGEXP\u EXTRACT\u ALL,我得到了一个以数字为元素的数组。 知道为什么我不能将每个元素的最大值设置为一个变量吗 这是我使用的代码: DECLARE x DEFAULT 0; SET x = ( SELECT max(REGEXP_EXTRACT_ALL(app_version, "\\d+")[SAFE_ORDINAL(2)]) FROM 'table_with_app

我有一个包含应用程序版本(v1.1.1、v1.1.2、v1.10.1等)的表。 使用
REGEXP\u EXTRACT\u ALL
,我得到了一个以数字为元素的数组。 知道为什么我不能将每个元素的最大值设置为一个变量吗

这是我使用的代码:

DECLARE x DEFAULT 0;

SET x = (
SELECT 
max(REGEXP_EXTRACT_ALL(app_version, "\\d+")[SAFE_ORDINAL(2)])
FROM
'table_with_app_version');

感谢下面是BigQuery标准SQL

#standardsql
create temp function normaizedsemanticversion(semanticversion string) 
as ((
  select string_agg(
      if(isdigit, repeat('0', 8 - length(chars)) || chars, chars), '' order by grp 
    ) || '..zzzzzzzzzzzzzz' 
  from (
    select grp, isdigit, string_agg(char, '' order by offset) chars,
    from (
      select offset, char, isdigit,
        countif(not isdigit) over(order by offset) as grp
      from unnest(split(semanticversion, '')) as char with offset, 
      unnest([char in ('1','2','3','4','5','6','7','8','9','0')]) isdigit
    )
    group by grp, isdigit
)));
create temp function comparesemanticversions(
  normsemanticversion1 string, 
  normsemanticversion2 string) 
as ((
  select
    case 
      when v1 < v2 then 'v2 newer than v1'
      when v1 > v2 then 'v1 newer than v2'
      else 'same versions'
    end
  from unnest([struct(
    normaizedsemanticversion(normsemanticversion1) as v1, 
    normaizedsemanticversion(normsemanticversion2) as v2
  )])
));
with test as (
  select 'v1.0.0-alpha' version union all
  select 'v1.0.0-alpha.1' union all
  select 'v1.0.0-alpha.beta' union all
  select 'v1.0.0-beta' union all
  select 'v1.0.0-beta.2' union all
  select 'v1.0.0-beta.11' union all
  select 'v1.0.0-rc.1' union all
  select 'v1.0.0' union all
  select 'v1.1.1' union all
  select 'v1.1.2' union all
  select 'v1.10.1' 
)
select string_agg(version order by normaizedsemanticversion(version) desc limit 1)
from test   

SQL Server不是BigQuery?希望,这就是您要找的。考虑接受,然后投票回答:O)
select version
from test
order by normaizedsemanticversion(version) desc 
limit 1