【问题标题】:Code to update records for both initcap and upper更新initcap和upper记录的代码
【发布时间】:2019-06-11 15:24:38
【问题描述】:

我正在尝试更新同时包含 initcap 和大写字母的记录。例如:Stages Home Health LLC;达纳·阿什

它同时具有 Initcap “Stages”和 Upper,即“LLC”

我尝试过使用 and 和 where 子句,但没有得到所需的结果

select bbl_id, entity_name from bbl_dq_test where entity_name =

UPPER (ENTITY_NAME) AND ENTITY_NAME = INITCAP (ENTITY_NAME);

但我正在寻找类似的东西

更新 bbl_dq_test A 设置 Text_field_format = 'BOTH' where entity_name = ( 一个同时找到 Initcap 和 Upper 的子句)

select bbl_id, entity_name from bbl_dq_test where entity_name =

UPPER (ENTITY_NAME) AND ENTITY_NAME = INITCAP (ENTITY_NAME);

只返回数字。

【问题讨论】:

  • 第一个明显的问题:你为什么要做你想做的任何事情?这是业务用户的实际分配,还是只是您为实际问题尝试的解决方案的一部分?如果是后者,说明您最终要解决的问题可能会有所帮助。那么 - 你应该如何处理像BMG GmbH 这样的输入?显然GmbH 既不是大写也不是initcap。 (GmbH 是 LLC 的德语)
  • 还有:单字母“单词”是否构成“大写”单词?例如,如果您输入“D Steele Corp”怎么办?你需要找到这个吗?或者像“Steele Advisors L.L.C.”这样的东西?更一般地说 - 你想如何处理标点符号(如在 L.L.C. 中)?

标签: oracle plsql capitalization


【解决方案1】:

REGEXP_LIKE 在这里可能会有所帮助:

下面的查询是一个起点。可能需要调整正则表达式模式以确保它们涵盖所有所需的情况 - 并考虑原始帖子中评论者提到的输入值。

SELECT *
  FROM  bbl_dq_test
  WHERE REGEXP_LIKE(entity_name, '(^[A-Z][a-z]| [A-Z][a-z])')
  AND REGEXP_LIKE(entity_name, '(^[A-Z]+ | [A-Z]+ | [A-Z]+$)');

参考: https://docs.oracle.com/database/121/SQLRF/conditions007.htm#SQLRF00501

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2017-03-20
    • 2018-12-07
    • 2021-06-16
    相关资源
    最近更新 更多