查询以列出名字和名字以相同字符开头的所有名称。名称只有一个列,即具有不同名称格式的名称,例如“ sivani naga”,“ naga sivani”,“ sivani sivu”
答案 0 :(得分:1)
Declare @table table (name varchar(100))
insert into @table Select 'sivani naga'
insert into @table Select 'naga sivani'
insert into @table Select 'sivani sivu'
select *,
SUBSTRING(name,1,1) name,
SUBSTRING(name,CHARINDEX(' ',name,1)+1,1) lastName
from @table where SUBSTRING(name,1,1) = SUBSTRING(name,CHARINDEX(' ',name,1)+1,1)
答案 1 :(得分:1)
SELECT *
FROM tablename
WHERE Substring(colname, 1, 1) = Substring(
Ltrim(
Substring(
colname,
Charindex(' ', colname),
Charindex(' ', Ltrim(
Substring(
colname,
Charindex(' ', colname),
Len(colname) - Charindex(' ', colname)
)
)
)
)
), 1, 1)
答案 2 :(得分:1)
此查询应满足要求。这是@Luis Gutierrez的回答,但是为了使阅读更容易(我认为),我通过使用返回所有名称和第一个字母的子查询减少了对SUBSTRING
函数的调用名字和姓氏本身作为一个表,然后从该子表中全部选择。我认为这样看起来更好,因为这样我就可以在where子句中的子查询中使用设置的列别名,而不用调用子字符串函数。
DECLARE @tbl TABLE (whole_name NVARCHAR(100))
INSERT INTO @tbl SELECT 'sivani naga'
INSERT INTO @tbl SELECT 'naga sivani'
INSERT INTO @tbl SELECT 'sivani sivu'
INSERT INTO @tbl SELECT 'a a'
INSERT INTO @tbl SELECT 'a b'
SELECT *
FROM (SELECT whole_name,
SUBSTRING(whole_name, 1, 1)
first_name_letter,
SUBSTRING(whole_name, CHARINDEX(' ', whole_name, 1) + 1, 1)
last_name_letter
FROM @tbl) AS newTable
WHERE first_name_letter = last_name_letter