用t-sql写一个查询,比较同一列的2个字符

时间:2018-07-20 10:48:14

标签: sql-server string tsql

查询以列出名字和名字以相同字符开头的所有名称。名称只有一个列,即具有不同名称格式的名称,例如“ sivani naga”,“ naga sivani”,“ sivani sivu”

3 个答案:

答案 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