【问题标题】:Select everything to the right of a specific character选择特定字符右侧的所有内容
【发布时间】:2019-05-17 13:39:35
【问题描述】:

鉴于此数据:

Home: (708) 296-2112  

我想要: 字符右侧的所有内容。

这是我目前所拥有的,但我没有得到任何结果:

right(phone1, locate(':', phone1 + ':')-1) phone

如果我使用left 而不是right,我只会得到“HOME”——仅用于测试目的。我知道我很接近,但我错过了一些东西。

【问题讨论】:

  • substring(phone1, locate(':', phone1) + 1, length(phone1))怎么样
  • 也可能是Work:Mobile: 行吗?
  • @jarlh 答案是肯定的,请参阅(现在)已删除的答案之一。
  • 您应该添加更多样本数据,具有不同的数字类型,以及预期的结果。

标签: sql advantage-database-server


【解决方案1】:

您可以改用SUBSTRING(可能是SUBSTR,具体取决于您的版本):

SELECT SUBSTRING(phone1, LOCATE(':', phone1) + 1, LENGTH(phone1))
FROM yourtable

【讨论】:

  • 我认为 stubstring 或 substr 没有优势。或者至少我从来没有让它工作过
  • 对不起,我做错了什么,谢谢。
【解决方案2】:

这是一种无需在Home: 中进行硬编码的方法,因此您也可以使用Office:Mobile:Fax:,或任何其他后跟冒号的单词。

这使用 ADS 的脚本功能来使用变量和内置的 System.iota 单行表(类似于 Oracle 的 dual)。您可以只使用最后一行,将test 替换为您的列名,将system.iota 替换为您的表名。

declare test string;
set test = 'Home: (708) 296-2112';
select substring(test, position(':' in test) + 1, length(test)) from system.iota;

【讨论】:

    【解决方案3】:

    你在正确的轨道上,但你的代数是错误的。你想用冒号位置偏移的字符串的全长减去一:

    right(phone1, length(phone1) - locate(':', phone1) - 1)
    

    【讨论】:

    • 我在我的答案中运行了几次逻辑,每次都检查出来。我不知道给你什么建议\:-|
    【解决方案4】:

    您可以按如下方式使用 RIGHT 函数:

    RIGHT(phone1, LEN(phone1)-CHARINDEX(':', phone1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-26
      • 2016-12-22
      • 2021-12-22
      • 1970-01-01
      • 2016-04-15
      • 2020-05-22
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多