如何在where子句中过滤字符串

问题描述

我想使用SAP HANA中的where子句提取字符串。例如,名称列有3个字符串。

class profile::software::apache (
  $PHP_version    = '7.4',$PHP_remove     = ['7.0‘,‘7.3'],#...
) {
  # build a hash of PHP Versions with a value of either present or absent
  # and iterate over it with each
  $PHPInstallHash = { $PHP_version => 'present' }
  #notify { "Value of PHPRemove: ${PHP_remove}": }
  if $PHP_remove {
    # We have the array,use the map function to build remove hash
    $PHPRemoveHash = $PHP_remove.map |$version| {
      { $version => 'absent' }
    }
    $PHPFullHash = $PHPInstallHash + $PHPRemoveHash
  } else {
    $PHPFullHash = $PHPInstallHash
  }
  #notify { "PHPHash to iterate over to install/uninstall: ${PHPFullHash}": }

  #iterate over the result installing/uninstalling
  $PHPFullHash.each | $PHP_version,$ensure_value | {
    ensure_packages([
      "PHP$PHP_version-xml","PHP$PHP_version-zip","PHP$PHP_version-curl","PHP$PHP_version-mbstring","libapache2-mod-PHP$PHP_version",],{
        'ensure' => $ensure_value,require  => [Class['apt::update'],Apt::Source['source_PHP_sury'],notify   => Class['apache::service'],}
    )

  }
}

使用where子句过滤名称列后,名称列中的输出将仅显示字符串的最后一部分。因此,输出将是这样。这意味着我们拥有的一切,只需从头开始删除至“ /”即可。

“ MasterData_Holdings” “审计与证券” “总帐”

解决方法

您可以尝试使用REPLACE_REGEXPR

我对Hana不熟悉,但是该功能非常简单,应该是:

select REPLACE_REGEXPR('.+/(.+)' IN fieldName WITH '\1' OCCURRENCE ALL) as field
...
where
... -- your filter

请注意,此正则表达式'.+/(.+)'会吃掉所有内容,直到最后一个/,例如,如果您有....checks/MasterData_Holdings/Something,它将仅返回Something