SQL:通过从左右两侧删除字符来获取子字符串

3
我有一列值,如下所示:

 [{"run_status":1,"daily_budget":"2000","campaign_id":"60952315"}].

什么查询可以删除第一个和最后一个括号,以便只剩下
 {"run_status":1,"daily_budget":"2000","campaign_id":"60952315"}    

如果你的答案依赖于SQL版本,我正在使用Hive。

1
Hive 定义了一个简单的类 SQL 查询语言 QL,使得熟悉 SQL 的用户可以查询数据。 - Jacob Midtgaard-Olesen
3个回答

12

数据库中的字符串操作在不同版本中经常有所不同。在Hive中,您需要:

select substr(<val>, 2, length(<val>) - 2)

0

这只是一个简单粗暴的方法,但另一种选择是创建一个值数组来替换并迭代它们。

    declare @origString varchar(150)
        ,@newString varchar(150)
        , @replace varchar(10)
        , @replace2 varchar(10)
        , @replaceValue varchar(10)

    set @replaceValue =''
    set @replace = '['
    set @replace2 =']'
    set @origString = '[{"run_status":1,"daily_budget":"2000","campaign_id":"60952315"}]'

    select REPLACE(REPLACE(@origString, @replace, @replaceValue), @replace2, @replaceValue)

在 SQL 上下文中,通常使用“迭代”一词是错误的。只有当这两个字符仅出现在存储字符串的开头/结尾时,此设置才是安全的 - 如果它出现在任何其他地方,您的结果将是“未定义的”。 - Clockwork-Muse
感谢提供的信息,作为一个回答 SQL 问题的开发者(编写自己的查询、存储过程等),像迭代这样的术语是很自然的。我总是愿意学习,所以如果在这种情况下使用“迭代”不正确,那么正确的术语是什么?循环?另外,如果我可以问一下,你会如何编写所提出问题的 SQL 呢?再次强调,作为开发者,我总是愿意学习解决问题的新方法。 - bluelightning1
正如其他人所发表的,SUBSTR()(特别是如果它确实只是第一个/最后一个字符)可能是更好的选择。'迭代'意味着同一函数在多行上执行(单个)。您嵌套的REPLACE()没有满足此要求。而且,因为SQL应该是基于集合的,实际迭代(使用实际循环结构)几乎总是错误的做法。像命令式程序一样处理SQL可能最终会与引擎对抗。 - Clockwork-Muse

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接