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

SQL:通过删除左右两侧的字符来获取子字符串,sql,string,substring,hive,Sql,String,Substring,Hive,我有一列值,如: [{"run_status":1,"daily_budget":"2000","campaign_id":"60952315"}]. 删除第一个和最后一个括号的查询是什么,我只剩下 {"run_status":1,"daily_budget":"2000","campaign_id":"60952315"} 如果您的答案取决于SQL版本,则我使用的是配置单元 您可以使用SUBSTR: SUBSTR(字符串源字符串,整数起始位置[,整数长度]),SUBSTR(字符

我有一列值,如:

 [{"run_status":1,"daily_budget":"2000","campaign_id":"60952315"}].
删除第一个和最后一个括号的查询是什么,我只剩下

 {"run_status":1,"daily_budget":"2000","campaign_id":"60952315"}    
如果您的答案取决于SQL版本,则我使用的是配置单元

您可以使用SUBSTR:

SUBSTR(字符串源字符串,整数起始位置[,整数长度]),SUBSTR(字符串源字符串,整数起始位置[,整数长度])


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

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

这是它的快速和肮脏之处,但另一种方法是创建一个值数组来替换和迭代它们

    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)

“Hive定义了一种简单的类似SQL的查询语言,称为QL,它使熟悉SQL的用户能够查询数据。”在SQL上下文中使用Iterate(通常)是错误的词。只要这两个字符只出现在存储字符串的开始/结束处,此设置也是安全的-如果它在其他地方,则结果是“未定义的”。感谢提供的信息,开发人员回答sql问题(编写我自己的所有查询、sp等),因此像iterate这样的术语自然出现。我总是愿意学习,所以如果迭代在这种情况下是不正确的,那么正确的术语是什么?环另外,如果我可以问一下,您将如何着手为所提出的问题编写sql?同样,开发人员总是愿意学习思考问题的新方法。正如其他人所发布的那样,
SUBSTR()
(特别是如果它确实是,只有第一个/最后一个字符)可能是更好的选择。”Iterate’表示在多行上(单独)执行相同的函数。您嵌套的
REPLACE()
并没有满足这个要求。此外,因为SQL应该是基于集合的,所以实际的迭代(使用实际的循环构造)几乎总是错误的。像命令式程序一样处理SQL很可能最终与引擎发生冲突。