【问题标题】:SAP HANA SQL String functionsSAP HANA SQL 字符串函数
【发布时间】:2018-08-27 13:31:06
【问题描述】:

我有一个表,其列 LIST_OF_NUMBERS 包含以下字符串:

10, 20, 395, 443, 534, 734, 954, 105, 156

我想将 LIST_OF_NUMBERS 列截断为 10 个字符,如下所示:

LEFT(LIST_OF_NUMBERS,10)

10, 20, 39

但是,如果字符串列表中的数字被部分截断,我想截断整个数字。例如,在我的情况下,我不想显示 39 因为它是误解。我想将整数截断如下:

10, 20,

我相信可以通过以下条件实现:

如果字符串不以逗号结尾,则截断字符串直到它以逗号结尾。

如何在 sql 脚本中翻译这个条件?

请注意,我是创建存储过程的新手。

【问题讨论】:

  • 将逗号分隔的值存储在单个列中是一个坏主意。阅读数据库规范化
  • 看起来有一个 instr() 函数可用,但如果我能从 help.sap.com 找到文档,我会被诅咒的(无论如何,它现在几乎无法运行)。也许尝试类似Left(yourfield, Instr(Substr(yourfield, 10, Length(yourfield)-10) + 10, ",")) 之类的东西 基本上找到出现在位置 10 或更高位置的第一个逗号,并使用该位置来确定 Left() 函数的第二个参数。我从来没有用过 Hana,所以我可能对这里的语法有点不理解。
  • @JNevill 是对的!该函数称为LOCATE,可以通过提供-1 作为起始位置,从字符串右侧开始寻找悬空的,。然后 SQL 表达式将类似于 LEFT (<yourfield> , LOCATE(LEFT(<yourfield>, 10), ',', -1) -1)
  • 谢谢@JNevill 和 Lars-br 它运行良好。
  • @JNevill 您应该将此评论转换为答案,以便可以关闭此问题。

标签: sql sap hana


【解决方案1】:

一个选项是一个长case when 语句。它将查看第 11 个字符,如果是逗号,我们想要前 10 位数字,如果不是,我们将查看第 10 位数字,如果是逗号,我们得到前 9 位数字,如果不是,我们将查看第 9 位并获取前 8 位,依此类推...

如果组成字符串的数字总是一定长度或更短,您可以缩短此检查,但这将单独检查每个数字

case when right(left(list_of_numbers,11),1)=','
    then left(list_of_numbers,11)
when right(left(list_of_numbers,10),1)=','
    then left(list_of_numbers,10)
when right(left(list_of_numbers,9),1)=','
    then left(list_of_numbers,9)
when right(left(list_of_numbers,8),1)=','
    then left(list_of_numbers,8)
when right(left(list_of_numbers,7),1)=','
    then left(list_of_numbers,7)
when right(left(list_of_numbers,6),1)=','
    then left(list_of_numbers,6)
when right(left(list_of_numbers,5),1)=','
    then left(list_of_numbers,5)
when right(left(list_of_numbers,4),1)=','
    then left(list_of_numbers,4)
when right(left(list_of_numbers,3),1)=','
    then left(list_of_numbers,3)
when right(left(list_of_numbers,2),1)=','
    then left(list_of_numbers,2)
else left(list_of_numbers,1) end as result

else 假设字符串以单个数字开头。

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2018-05-31
    相关资源
    最近更新 更多