选择字符串直到字符串中的第一个或第二个空

时间:2014-01-30 12:40:13

标签: mysql sql sql-server

我的表列包含每行数据,如下所示:

|                 Simbols              |
|--------------------------------------|
|H412 Text text                        |
|H413 Text text text text              |
|EUH 001 Text text text text text text |
|EUH 006 text text                     |
|EUH 201/201A Text text. Text text     |

我需要从这些数据获取这样的数据:

|Simbols     |
|------------|
|H412        |
|H413        |
|EUH 001     |
|EUH 006     |
|EUH 201/201A|

我尝试使用SUBSTRING和CHARINDEX,但直到最后都不起作用......它只需要第一个空间或类似的东西...... QUERY:

SELECT 
CASE 
    WHEN SUBSTRING(Simbols, 1, CHARINDEX(' ', Simbols)) = ''
    THEN Simbols + ' '
    ELSE SUBSTRING(Simbols, 1, CHARINDEX(' ', Simbols))
END 'Simbols'
FROM dbo.table

结果:

|  Simbols   |
|------------|
|H412        |
|H413        |
|EUH         |
|EUH         |
|EUH         |

我怎样才能完成这项工作,问题出在哪里? 也许有不同的方式来获得这些Simbols?
附: “文本文本文本”就是一个例子,有一个“Simbols”的解释

3 个答案:

答案 0 :(得分:3)

The CharIndex() function有一个可选的第三个参数 - start_location - 这将是关键所在。

SELECT your_column
     , CharIndex(' ', your_column) As first_space
     , CharIndex(' ', your_column, CharIndex(' ', your_column) + 1) As second_space
     , SubString(your_column, 1, CharIndex(' ', your_column, CharIndex(' ', your_column) + 1)) As first_two_words
FROM   your_table

不幸的是,当CharIndex()函数找不到指定的字符串(在这种情况下是单个空格' ')时,它将返回0(零)。

这意味着如果没有第一个或第二个空格,我上面示例中first_two_words的结果将返回一个空字符串SubString(your_column, 1, 0) = ''

要解决这个问题,你需要有点聪明。

基本上,如果second_space = 0那么我们需要返回完整的字符串。我们有几个选择:

SELECT your_column
     , CharIndex(' ', your_column) As first_space
     , CharIndex(' ', your_column, CharIndex(' ', your_column) + 1) As second_space
     , SubString(your_column, 1, CharIndex(' ', your_column, CharIndex(' ', your_column) + 1)) As first_two_words
     , SubString(your_column, 1, Coalesce(NullIf(CharIndex(' ', your_column, CharIndex(' ', your_column) + 1), 0), Len(your_column))) As first_two_words_option1
     , CASE WHEN CharIndex(' ', your_column, CharIndex(' ', your_column) + 1) = 0 THEN your_column ELSE SubString(your_column, 1, CharIndex(' ', your_column, CharIndex(' ', your_column) + 1)) END As first_two_words_option2
FROM   (
        SELECT 'one' As your_column
        UNION ALL SELECT 'one two'
        UNION ALL SELECT 'one two three'
        UNION ALL SELECT 'one two three four'
       ) As x

答案 1 :(得分:0)

尝试这样的事情:

select TRIM(REPLACE(lower(type),"text" ,"")) as T, type from supportContacts

Sql Fiddle:http://sqlfiddle.com/#!2/d5cf8/4

了解更多信息:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

答案 2 :(得分:0)

试试这个:它有效

SELECT CASE WHEN charindex(' ', Simbols, charindex(' ', Simbols) + 1) = 0
THEN Simbols
ELSE LEFT(Simbols, charindex(' ', Simbols, charindex(' ', Simbols) + 1))
END
FROM dbo.table

这是我试过的截图。 enter image description here

这是新的编辑

SELECT REPLACE(Simbols, 'text', '') FROM dbo.table

这是屏幕截图

enter image description here