Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL从字符串中提取字符_Sql_Substring_Character_Tableau Api_Charindex - Fatal编程技术网

使用SQL从字符串中提取字符

使用SQL从字符串中提取字符,sql,substring,character,tableau-api,charindex,Sql,Substring,Character,Tableau Api,Charindex,我有一列ID,我需要使用SQL来提取“-”后面的前两个字符 我正在使用Tableau 10.4中的自定义SQL查询 示例列: ABC - BCA - IT AD - HD - A QWE - QWE - E 我需要的是: BC HD QW 我尝试过使用substring和Charindex函数,但似乎无法得到它。有什么想法吗?您可以使用: select substring(example, charindex(' - ', example) + 3, 2) from (values ('AB

我有一列ID,我需要使用SQL来提取“-”后面的前两个字符

我正在使用Tableau 10.4中的自定义SQL查询

示例列:

ABC - BCA - IT
AD - HD - A
QWE - QWE - E
我需要的是:

BC
HD
QW
我尝试过使用substring和Charindex函数,但似乎无法得到它。有什么想法吗?

您可以使用:

select substring(example, charindex(' - ', example) + 3, 2)
from (values ('ABC - BCA - IT'), ('AD - HD - A')) v(example)

如果您正在使用SQL Server,则可以使用
substring()
函数:

select substring(col, charindex('-', col) + 1, 2)) as need

在MySQL中,有很多可能的表达式。最大的区别是处理不完全包含两个破折号字符的字符串值

MySQL提供了一个方便的
子字符串索引
函数

假设字符串值正好包含两个破折号字符,则如下所示:

 SELECT c.foo
      , TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(c.foo,'-',2),'-',-1)) AS mid
   FROM ( 
          SELECT  'ABC - BCA - IT' AS foo
          UNION ALL SELECT 'AD - HD - A'
          UNION ALL SELECT 'QWE - QWE - E'
        ) c
如果不想删除前导空格和尾随空格,请省略
TRIM
函数

foo              mid
---------------  ---
ABC - BCA - IT   BCA
AD - HD - A      HD
QWE - QWE - E    QWE

我已经有一段时间没有和Tableau合作了,但是IIRC这应该是一个有用的东西:

LEFT(TRIM(SPLIT([Column], `-`, 2)), 2)
据我所知,Tableau的任何版本都不支持
子字符串

或者,这也可能有助于:

MID([Column], FIND([Column], "-") + 2, 2)

用您正在使用的数据库标记您的问题。如果支持子字符串/charindex函数,您知道我是否在使用Tableau中的自定义SQL查询函数吗?