【问题标题】:Substring SQL With a condition带有条件的子字符串 SQL
【发布时间】:2018-11-02 16:59:39
【问题描述】:

我必须提取子字符串,但前提是满足条件。 此栏的用户必须填写客户的电话号码(这是一个varchar栏),

这些存储值的一些示例是:

  1. 23==880-3112==9435
  2. 52==031 31466==171
  3. 321==15850

“=”是我不想分享的数字。

我需要提取手机号码(长度为 10 的那个),但是如您所见,这些号码没有存储在相同的位置,我不能使用 LEFT() 或 RIGHT() 函数因此,有些用“-”隔开,有些则在门牌号和手机号之间用空格隔开。

如果这不能用 SQL 完成,我正在使用 Java,但我什至不知道从哪里开始。

提前致谢。

编辑: 我正在使用 SQL SERVER 2012 示例的预期结果是

  1. 3112==9435
  2. 31466==171
  3. 312==15850

我想始终获取 10 个字符的数字。

对不起,谢谢

【问题讨论】:

  • 你在用什么rdbms
  • 您能解释一下= 的含义吗?如果= 只是掩盖了我们的数字,您可以使用任意数字。
  • 那里应该发生什么?一些 DBMS 可以使用正则表达式,重要的是要知道您使用的是 MySQL 还是 PostgreSQL 或 SQLite 或 SQL Server 等。您的要求可以改写为“从字符串中提取最后 10 个数字”吗?还是您的意思是“第一次出现 10 个连续数字”?正则表达式可以做其中任何一个,但您没有告诉我们您使用的是哪个 DBMS,所以我们不知道您是否可以访问正则表达式。
  • 您对 1,2 和 3 的预期结果究竟是什么?

标签: java sql substring conditional-statements


【解决方案1】:

可以使用字符串比较function

第一个示例的一部分将在哪里

WHERE TELEPHONE_NO LIKE '23%%880-3112%%9435'

[编辑]

要提取子字符串,您可以使用https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index

mysql> SELECT SUBSTRING_INDEX('23==880-3112==9435', '-', 10);
    -> '3112==9435'

【讨论】:

  • OP 想要extract 一个电话号码。类似于选择最后十个数字。
  • 现在只有我明白这个问题:-(请看编辑。你可以使用正则表达式来匹配空格和'-'
  • 在第 2 行,它跟在一个空格后面。在第 3 行,它立即开始。 “关注-”不是 OP 要求的。
  • 我试过了。但找不到办法。我们必须使用java代码。
  • 除非 OP 有 postgreSQL 或任何支持正则表达式的 SQL 方言。但是,由于 OP 没有响应,我猜 OP 不再关心了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多