我的表列包含每行数据,如下所示:
| 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”的解释
答案 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
这是我试过的截图。
这是新的编辑
SELECT REPLACE(Simbols, 'text', '') FROM dbo.table
这是屏幕截图