2字符或全长SQL之间的子串

时间:2016-11-01 21:53:28

标签: sql sql-server ssms-2012

我有一个问题,让我说我有一个带有值的列A:

te SN: 123454A / Lo
te SN: 12348887
te SN: 547896

我希望在:之后检索+ /之前的所有内容,但如果/不存在,请在:之后获取所有内容。

所以我的结果是:

123454A
12348887
547896

3 个答案:

答案 0 :(得分:1)

由于您没有标记您的DBMS,因此这是算法。请自行查看DBMS中可用的字符串函数。

获取子字符串...

  • 从第一个':'的位置在你的字符串+ 2
  • 到第一个位置' /'在你的字符串中添加斜杠 - 1

以下是如何在标准SQL中添加斜杠:col || ' /&#39 ;.添加斜杠可确保查找斜杠不会失败,我们要么读取原始字符串中存在的斜杠,要么直到原始字符串的末尾。

答案 1 :(得分:0)

我假设您使用MySql

select SUBSTRING(myColumn FROM LOCATE(':',myColumn)+2,FOR LOCATE('/',myColumn) -LOCATE(':',myColumn)-2) from myTable

如果你使用Mssql那么

    select SUBSTRING(myColumn , CHARINDEX(':',myColumn)+2, CHARINDEX('/',myColumn) -CHARINDEX(':',myColumn)-2)      
from myTable

我无法运行MSSQL所以我只是翻译了,希望它能正常工作

答案 2 :(得分:0)

这将找到冒号,然后添加两个。找到斜杠(如果它存在),如果它没有使用字符串的结尾。

DECLARE @MyTable TABLE ( ColumnA VARCHAR(50) )
INSERT @MyTable (ColumnA) VALUES ('te SN: 123454A / Lo'), 
                                 ('te SN: 12348887'), 
                                 ('te SN: 547896')

SELECT  *, 
        SUBSTRING(COLUMNA, CHARINDEX(':', ColumnA) + 2, 
                   CASE WHEN CHARINDEX('/', ColumnA) = 0 THEN LEN(ColumnA)
                        ELSE CHARINDEX('/', ColumnA) END - 
                                  (CHARINDEX(':', ColumnA) + 2)) [MySubString]
FROM @MyTable