我正在使用一个似乎在某些字符串字段中具有不可打印字符的Sybase数据库,这会丢掉我们的一些处理代码。乍一看,它似乎只是换行符和回车符,但我们还有一个ASCII码27 - 一个ESC字符,一些重音字符,还有其他一些奇怪的东西。
我无法直接访问更改数据库,因此无法更改错误数据。现在我必须把它过滤掉。我们尝试从一个数据库导出表数据,并在夜间批处理过程中将其加载到另一个应用程序使用的数据库中。
理想情况下,我希望有一个函数,我可以传递一个字符列表,只是让Sybase返回删除了这些字符的数据。如果可能的话,我想保留一些我们可以在纯SQL中做的事情。
这样可以删除ASCII 0 - 31的字符。
选择str_replace(FIELD1,(0-31),NULL)作为FIELD1, str_replace(FIELD2,(0-31),NULL)为FIELD2 来自TABLE
到目前为止,str_replace是我能找到的最近的,但它只允许用另一个字符串替换一个字符串。不支持字符范围,也不允许我这样做。
我们在Unix服务器上运行Sybase ASE 12.5。
答案 0 :(得分:1)
这样的东西适用于SQL Server,它使用像Sybase这样的T-SQL:
while @@ROWCOUNT > 0
UPDATE TheTable
SET strColumn = REPLACE(strColumn, SUBSTRING(strColumn,
PATINDEX('%[^a-zA-Z0-9 ]%',
strColumn collate Latin1_General_BIN), 1), '')
WHERE PATINDEX('%[^a-zA-Z0-9 ]%',
strColumn collate Latin1_General_BIN) <> 0
Sybase至少似乎存在patindex function。
校对需要匹配二进制;否则[a]
会匹配'á'。