Oracle中调用以$字符开头的值

Calling a value starting with $ character in Oracle

假设您有一个名为 Employee 的 table,其中一个 员工姓名 开始或包括 [$]或字符串中的 [#] 符号,如 Hel$lo 或 #heLLo。你怎么称呼价值?

是否可以在单个命令中 select 和 trim 值?

亲切的问候

如果你想select名字,但去掉了特殊字符$和#,你可以使用TRANSLATE函数。如果需要,可以向列表中添加更多字符。

select translate(name, 'A$#', 'A') from employee;

该函数会将字符 'A'“翻译”为自身,将“$”和“#”“翻译”为空(只需将它们从字符串中删除),并保留所有其他字符 - 除了 A , $ 和 # - 不变。在整个业务中需要 'A' 似乎很奇怪;你确实不需要 'A',但你确实需要一些你想 保留 的角色。原因是 Oracle 对 null; 的愚蠢处理;不用纠结原因,记住技巧就好

您可能需要删除字符,但您事先并不知道它们是什么。这也可以做到,但您需要注意不要删除合法字符,例如点 (A. C. Green)、破折号 (John Connor-Smith)、撇号 (Betty O'Rourke) 等。然后您可以使用正则表达式(易于编写,但不是最有效的)或使用上面的 TRANSLATE(它看起来更丑陋,但会 运行 更快)。像这样:

select regexp_replace(name, [^[:alpha:].'-]) from employee

这将替换任何不是“alpha”(字母)或具体列举的字符之一(点、撇号、破折号)的任何字符,有效地删除它们。请注意破折号在字符 类 中有特殊含义,因此它 必须 是枚举中的最后一个。

如果您需要在 table 本身中进行更改,您可以使用 update 语句,如上所示使用 TRANSLATE 或 REGEXP_REPLACE。