我能够使用ANSI SQL从字符串中提取第一个单词,如下所示:
SELECT SUBSTRING(name FROM 1 FOR POSITION(' ' IN name)) AS first_name
但是,如果原始字符串只有一个字长(即,如果没有空格),则返回一个空子字符串。
如何调整上述查询来解决这个问题?
提前致谢。
答案 0 :(得分:1)
简单而又凌乱的解决方案 - 在最后添加一个空格:
SELECT SUBSTRING((name || ' ') FROM 1 FOR POSITION(' ' IN (name || ' '))) AS first_name
答案 1 :(得分:1)
使用条件if语句。
对于MySQL / SQL Server答案:
SELECT IF(INSTR(name, ' ') >0, LEFT(name, INSTR(name, ' ') - 1), name) AS firstname
对于Oracle:
SELECT IF(INSTRB(name, ' ', 1, 1) >0, SUBSTR(name, 1, INSTRB(name, ' ', 1, 1) - 1), name) AS firstname
答案 2 :(得分:0)
我确信有更简洁的方法可以做到这一点,但这很有效。
DECLARE @tbl TABLE (i varchar(100));
INSERT INTO @tbl ( i )
VALUES ('hello'), ('hello space here');
SELECT *,
SUBSTRING(i, 0, CASE CHARINDEX(' ', i)
WHEN 0 THEN LEN(i) + 1
ELSE CHARINDEX(' ', i)
END)
FROM @tbl
答案 3 :(得分:0)
将列名放在@foo
的位置DECLARE @Foo VARCHAR(50) = 'One Two Three'
SELECT
CASE
--For One Word
WHEN CHARINDEX(' ', @Foo, 1) = 0 THEN @Foo
--For multi word
ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1)
END
答案 4 :(得分:0)
DECLARE @test VARCHAR(50) = 'One Two Three'
SELECT SUBSTRING(LTRIM(@test),1,(CHARINDEX('',LTRIM(@test)+'')-1))