【问题标题】:SQL get string after second commaSQL 在第二个逗号后获取字符串
【发布时间】:2022-06-17 21:58:35
【问题描述】:

我有这样的字符串:

'Ing. , Jožko, Mrkvička, Bc.'

我只需要:

'Mrkvička'

谢谢。

【问题讨论】:

  • 你能分享你在这个问题上的尝试吗?
  • 您使用的是什么 RDBMS(SQL Server、Mysql、Oracle、Snowflake、Postgres、Teradata、MariaDB 等)?此列中是否还有其他具有不同模式的字符串。我从这个单一实例中假设的模式是用逗号分割这个字符串,修剪每个元素,然后返回第三个元素。这适用于所有实例吗?
  • 这在 SQL Server 上会很难看。相反,请考虑在将数据引入数据库之前对其进行规范化。

标签: sql string substring charindex


【解决方案1】:

不是最干净的解决方案。但是可以这样实现

 SELECT SUBSTRING_INDEX (SUBSTRING_INDEX("Ing. , Jožko, Mrkvička, Bc.", ',', -2),',',1)

它会给你你想要的输出

【讨论】:

  • 对未指定 dbms 的问题的产品特定答案。至少告诉我们这是用于哪个 dbms。
【解决方案2】:

在mysql中:

select substring_index(substring_index('Ing. , Jožko, Mrkvička, Bc.', ',', 3), ',', -1)

【讨论】:

  • 我确实相信我的答案中的第二个词指定了 dbms
  • 绝对正确。打扰您了!
【解决方案3】:

您可以尝试以下查询:

SELECT TOP 1 TRIM(value)
FROM STRING_SPLIT('Ing. , Jožko, Mrkvička, Bc.', ',')
ORDER BY CASE WHEN ROW_NUMBER() OVER(ORDER BY (SELECT 1)) = 3 
              THEN 0 
              ELSE 1 END 

STRING_SPLIT 函数将根据您选择的分隔符 (,) 拆分您的字符串,然后使用 ROW_NUMBER 窗口函数对结果进行排序,并使用 TOP 1 将结果限制为一个结果。

试试here

此解决方案适用于 SQL Server。

【讨论】:

  • 对,charindex 标记建议请求 SQL Server 解决方案,我将立即更新我的答案。 @jarlh
【解决方案4】:

对于 PostgreSQL:

select regexp_matches('Ing. , Jožko, Mrkvička, Bc.', '[^,]+,[^,]+,\s+([^,]+),')

【讨论】:

    【解决方案5】:

    我更喜欢做如下的正则表达式

    select regexp_matches('Ing. , Jožko, Mrkvička, Bc.', '[^,]+,[^,]+\s+,([^,]+),') 
    from yourTable
    

    输入:

    'Ing. , Jožko, Mrkvička, Bc.'
    

    输出:

    'Mrkvička'
    

    此解决方案适用于 PostgreSQL。

    【讨论】:

    • 对未指定 dbms 的问题的产品特定答案。至少告诉我们这是用于哪个 dbms。
    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 2021-12-17
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多