使用变量在bash中生成where子句

dxxyhpgq  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(316)

我有一些变量 bash 就像下面一样。

min_date='2020-06-06'
max_date='2020-06-08'
max_seq_min_date=1  --This is till where data is processed
max_seq_max_date=3  --This is till where data has to be processed

batch_date is the column where I will use the min and max_date values

每一天都会有 4 序列
我想生成一个可以在sql查询中使用的where子句
现在我想生成一个where子句,如下所示

WHERE 1=1 or (batch_date = '2020-06-06' and seq_num in ('2','3', '4')) 
or (batch_date = '2020-06-07' and seq_num in ('1','2','3','4'))
or (batch_date = '2020-06-08' and seq_num in ('1','2','3'))

我怎样才能达到我想要的?

h5qlskok

h5qlskok1#

对查询做一些小的更改会更有效—使动态生成(等价的)sql更容易。
它使用“between”运算符来避免“in(…)”条件的可变长度列表。
注意关于1=1的注解,它是根据问题保留的,但需要复查,因为它将始终使条件通过。

min_date='2020-06-06'
max_date='2020-06-08'
max_seq_min_date=1
max_seq_max_date=3

echo "
WHERE 1 = 1 or case
    when batch_date = '$min_date' then seq_num between 1 and $max_seq_min_date
    when batch_date = '$max_date' then seq_num between 1 and $max_seq_max_date
    when batch_date between '$min_date' and '$max_date' then seq_num between 1 and 4
    else false
    end
"

我没有mysql,但是上面的内容适用于postgresql。

pnwntuvh

pnwntuvh2#

只需使用插值,即。

sql_clause="... batch_date = '$min_date' and seq_num in ('2','3', '4') ...."

相关问题