【问题标题】:String manipulation with Replace in SQL在 SQL 中使用 Replace 进行字符串操作
【发布时间】:2016-12-02 00:47:53
【问题描述】:

我正在使用替换功能在几个关键字周围添加一些引号。 但是,这种替换不适用于以下几种情况。

请参阅下面的示例。

这是查询:

replace(replace(aa.SourceQuery,'sequence','"sequence"'),'timestamp','"timestamp"')

之前:

select timestamp, SparkTimeStamp
from SparkRecordCounts

之后:

select "timestamp", Spark"timestamp"
from SparkRecordCounts

但是,我希望它是这样的:

select "timestamp", Sparktimestamp
from SparkRecordCounts

【问题讨论】:

  • 什么是 RDBMS?是否支持替换功能中的正则表达式?
  • Oracle 有一个 regexp_replace 可以执行此操作,但我们确实需要了解您的 RDBMS。
  • 您能否确认您使用的是什么数据库?您是否希望引用保留关键字,这些关键字用作 SQL 查询字符串中的标识符?我假设这是因为显然timestamp 是一种数据类型,而sequence 是一种数字序列生成器。
  • 我正在使用 SQL Server

标签: sql replace


【解决方案1】:

编辑我在知道您使用的是什么 RDBMS 之前写了这篇文章,但为了防止它帮助其他人而留下了它。

我认为您正在寻找替换中的单词边界,这通常是正则表达式的工作。

Oracle 有一个内置的,称为 regexp_replace,你可以使用这样的东西:

regexp_replace(aa.SourceQuery, '(^|\s|\W)timestamp($|\s|\W)', '\1"timestamp"\2')

正则表达式在开头查找:

  • ^ - 行首或
  • \s - 空格字符或
  • \W - 非单词字符

然后匹配timestamp,并且必须以:

  • $ - 行尾或
  • \s - 空格字符或
  • \W - 非单词字符

然后,并且只有在那时,它才会执行替换。 \1 和 \2 用于保留单词开头和结尾匹配的单词边界。

我不确定其他数据库如何处理 regexp_replace,看起来 mysql 可以通过像 this 这样的插件,但可能没有原生方法。

SQL Server 有类似here 的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多