【问题标题】:RegexLike code won't return numbers that start with 0RegexLike 代码不会返回以 0 开头的数字
【发布时间】:2021-06-18 14:43:30
【问题描述】:

我正在尝试从整数(正数或负数)或数字到小数点后两位的字符串中返回数字,但是代码似乎忽略了以 0 开头的数字,我希望对如何获得一些帮助修复这个问题,代码如下:

WITH A AS(
SELECT CURRENT_BALANCE, ( CASE WHEN (REGEXP_LIKE(CURRENT_BALANCE,'^-?[0-9]+(\.[0-9]{1,2})?$')) then 1 ELSE 0 end ) AS T FROM BALANCE_TABLE )

SELECT * FROM A
WHERE T = 0 
LIMIT 1 

-- regexp_like 是问题所在,上面的代码只是返回给我没有被拾取的数字

编辑:未返回的示例:0.00、-0.07、0.04 谢谢

【问题讨论】:

  • 请在您认为应该匹配时提供匹配和不匹配的示例。另外,为什么current_balance 会被存储为字符串?
  • 对不起,我在帖子中添加了示例,老实说,表格最初是如何设置的 - 大概是为了能够添加 N/A 或以其他方式区分我们缺少信息的地方,而不是仅仅一个空
  • 您的代码对待规定值的方式与对待整数的方式相同:dbfiddle.uk/…

标签: sql db2


【解决方案1】:

请尝试WHERE T = 1

WITH A AS(
SELECT CURRENT_BALANCE, ( CASE WHEN (REGEXP_LIKE(CURRENT_BALANCE,'^-?[0-9]+(\.[0-9]{1,2})?$')) then 1 ELSE 0 end ) AS T FROM BALANCE_TABLE )

SELECT * FROM A
WHERE T = 1 
LIMIT 1 

【讨论】:

  • 这将返回符合 REGEXP_LIKE 标准的属性,但是我使用代码找到了不符合条件的字符串,我正在寻求帮助以了解以下内容不符合标准的原因以及如何修复它:0.00,0.06,-0.04
  • 能否请您分享 BALANCE_TABLE 中的示例数据,这对它不起作用。
  • 要么告诉dbfiddle link 的语句结果有什么问题,要么使用您的数据编辑此语句,提供相应的链接并描述您的数据结果有什么问题。
猜你喜欢
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2017-11-02
  • 2012-12-06
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多