【问题标题】:Sybase replace functionsybase 替换功能
【发布时间】:2015-04-14 21:00:48
【问题描述】:

我无法使用 sybase replace 函数来替换数据。 基本上我需要的是更新所有出现的'abc' 并更改为'zzz'。] table_clmn 是数据类型文本 我正在使用以下 sql --

update  table
set table_clmn = replace(table_clmn , 'abc', 'zzz') WHere id in (1, 2)

我收到以下错误

关键字“replace”附近的语法不正确。

【问题讨论】:

  • Sybase 不是数据库。您需要指定您使用的 Sybase 产品和版本(ASE、SqlAnywhere、IQ 等)

标签: sybase sap-ase


【解决方案1】:

假设您使用的是 Sybase ASE,您需要使用内置函数“str_replace()”而不是“replace()”。 'replace' 函数只能用于更改表列的默认约束。

【讨论】:

  • 谢谢 Rob,是的,我试过了。所以这就是我正在做的 UPDATE tableName set clnName = str_replace(convert(varchar(16384),clnName), 'ABC', 'XYZ') WHERE ClnId = 1,我在这里看到的一个问题是即使没有更新记录结果集显示更新了 1 条记录,这可能是转换函数的结果。您还看到使用转换函数将文本数据类型转换为 varchar 有什么危害吗?由于“clnName”列是文本数据类型,我必须使用转换函数来更改在我可以使用替换功能之前将其转换为 varchar
  • 我注意到的另一个问题是:数据类型 text 的列可以容纳比 varchar 更大的大小,所以我使用的转换函数会导致数据被截断......关于如何让它工作的任何提示?
  • 一个 'text' 最多可以包含 2GB,varchar 不能包含超过 16384 字节(对于变量),或者对于表列甚至更少。因此,如果文本值中有超过 16384 字节的数据,这些从根本上是不兼容的。由于 str_replace() 仅在 varchar 上运行,因此这可能不是一个可行的解决方案。现在,如果您正在运行 ASE 15.7,您也可以使用对 LOB 值进行操作的 charindex() 和 substring() 函数。但是您一次只能替换字符串,因此您需要编写一个循环并执行多次传递,直到所有字符串都被替换。
  • 关于第一个问题:如果说更新了 1 行,那么它确实更新了 1 行。可能没有要替换的字符串“ABC”,但您的更新查询无论如何都会执行更新。为避免这种情况,请添加谓词“AND charindex('ABC',CInName) > 0”
  • 非常感谢您的回复。
猜你喜欢
  • 2019-08-17
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2015-09-28
相关资源
最近更新 更多