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。
假设您有一个名为 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。