如果顺序在SQL Server中不重要,如何比较两个字符串?
例如,如果我有两个名字:
Column 1 | Column 2
___________________________________
John Doe | Doe, John
Stella Maris | Maris, Stella
Nima Lima | Lima, Nima
Jensen, James | James Jensen
Katrina Blade | Katrina the Blade
因此它说除最后一个以外的所有其他都是相同的?
仅凭CASE WHEN [Column 1] = [Column 2] THEN 1 ELSE 0 END
语句是不可能的。是否有可能将名称标记为字母,通过清理功能运行它以删除标点符号,然后比较我按顺序排列的字母是否相等?可以用SQL完成吗?
答案 0 :(得分:0)
上面有一个非常有趣的注释字符串,但是OP的要求似乎很简单:[first last]或[last,first]格式的名字+姓氏是否匹配?如果就这么简单,您可以像这样重新格式化column1和column2:
CREATE table #T1 (column1 nvarchar(max), column2 nvarchar(max))
INSERT INTO #T1 (column1, column2)
VALUES
('John Doe', 'Doe, John')
,('Stella Maris', 'Maris, Stella')
,('Nima Lima', 'Lima, Nima')
,('Jensen, James', 'James Jensen')
,('Katrina Blade', 'Katrina the Blade')
SELECT column1, column2,
RTRIM(
LTRIM(
SUBSTRING(column1, CHARINDEX(',', column1) + 1, LEN(column1) - CHARINDEX(',', column1))
+ CASE
WHEN CHARINDEX(',', column1) > 0
THEN ' ' + LEFT(column1, CHARINDEX(',', column1) - 1)
ELSE ''
END
-- or if using SQL Server 2017 TRIM(',', LEFT(column1, CHARINDEX(',', column1)))
)
),
RTRIM(
LTRIM(
SUBSTRING(column2, CHARINDEX(',', column2) + 1, LEN(column2) - CHARINDEX(',', column2))
+ CASE
WHEN CHARINDEX(',', column2) > 0
THEN ' ' + LEFT(column2, CHARINDEX(',', column2) - 1)
ELSE ''
END
-- or if using SQL Server 2017 TRIM(',', LEFT(column2, CHARINDEX(',', column2)))
)
)
FROM #T1