SQL Server/TSQL:查询以获取大型名称行
我有一个字段名为的表:SQL Server/TSQL:查询以获取大型名称行,tsql,sql-server-2012,Tsql,Sql Server 2012,我有一个字段名为的表: TABLE Name WANTED: ----------------- Done This Barcel Barcelona This Paris Parisinos This 短名字是坏名字。我不需要那些文件 sql server中的查询是哪个?不确定您希望如何处理重复项,但这会产生您想要的结果 DECLARE @
TABLE
Name WANTED:
-----------------
Done This
Barcel
Barcelona This
Paris
Parisinos This
短名字是坏名字。我不需要那些文件
sql server中的查询是哪个?不确定您希望如何处理重复项,但这会产生您想要的结果
DECLARE @Name TABLE (
Name VARCHAR(20)
)
INSERT INTO @Name SELECT 'Done'
INSERT INTO @Name SELECT 'Barcel'
INSERT INTO @Name SELECT 'Barcelona'
INSERT INTO @Name SELECT 'Paris'
INSERT INTO @Name SELECT 'Parisinos'
DELETE t2
from @Name t1
INNER JOIN @Name t2 ON t1.Name LIKE t2.Name + '%'
AND t1.Name<>t2.Name
SELECT * FROM @Name
DECLARE@Name表(
名称VARCHAR(20)
)
插入到@Name中选择“完成”
插入@Name选择“Barcel”
插入@Name选择“巴塞罗那”
插入@Name选择“Paris”
插入@Name选择“巴黎人”
删除t2
来自@Name t1
t1上的内部联接@Name t2.Name类似于t2.Name+'%'
和t1.Namet2.Name
从@Name中选择*
不确定您希望如何处理重复项,但这会产生您想要的结果
DECLARE @Name TABLE (
Name VARCHAR(20)
)
INSERT INTO @Name SELECT 'Done'
INSERT INTO @Name SELECT 'Barcel'
INSERT INTO @Name SELECT 'Barcelona'
INSERT INTO @Name SELECT 'Paris'
INSERT INTO @Name SELECT 'Parisinos'
DELETE t2
from @Name t1
INNER JOIN @Name t2 ON t1.Name LIKE t2.Name + '%'
AND t1.Name<>t2.Name
SELECT * FROM @Name
DECLARE@Name表(
名称VARCHAR(20)
)
插入到@Name中选择“完成”
插入@Name选择“Barcel”
插入@Name选择“巴塞罗那”
插入@Name选择“Paris”
插入@Name选择“巴黎人”
删除t2
来自@Name t1
t1上的内部联接@Name t2.Name类似于t2.Name+'%'
和t1.Namet2.Name
从@Name中选择*
这适用于您拥有的数据:
样本数据:
IF OBJECT_ID('tempdb..#Names') IS NOT NULL
DROP TABLE #Names;
CREATE TABLE #Names(Name VARCHAR(100));
INSERT INTO #Names
VALUES
('Done'),
('Barcel'),
('Barcelona'),
('Paris'),
('Parisinos');
查询:
WITH CTE
AS (SELECT A.Name
, B.Name AS B_NAME
, ROW_NUMBER() OVER(PARTITION BY B.Name ORDER BY A.Name DESC) AS RN
FROM #Names AS A
LEFT OUTER JOIN #Names AS B ON A.Name LIKE B.Name+'%')
SELECT DISTINCT
Name
FROM CTE
WHERE RN = 1;
结果:
但如果您有以下情况:
IF OBJECT_ID('tempdb..#Names') IS NOT NULL
DROP TABLE #Names;
CREATE TABLE #Names(Name VARCHAR(100));
INSERT INTO #Names
VALUES
('Done'),
('Barcel'),
('Barcelona'),
('Paris'),
('Parisinos'),
('Parisians');
我不确定您希望如何处理它。这将适用于您拥有的数据: 样本数据:
IF OBJECT_ID('tempdb..#Names') IS NOT NULL
DROP TABLE #Names;
CREATE TABLE #Names(Name VARCHAR(100));
INSERT INTO #Names
VALUES
('Done'),
('Barcel'),
('Barcelona'),
('Paris'),
('Parisinos');
查询:
WITH CTE
AS (SELECT A.Name
, B.Name AS B_NAME
, ROW_NUMBER() OVER(PARTITION BY B.Name ORDER BY A.Name DESC) AS RN
FROM #Names AS A
LEFT OUTER JOIN #Names AS B ON A.Name LIKE B.Name+'%')
SELECT DISTINCT
Name
FROM CTE
WHERE RN = 1;
结果:
但如果您有以下情况:
IF OBJECT_ID('tempdb..#Names') IS NOT NULL
DROP TABLE #Names;
CREATE TABLE #Names(Name VARCHAR(100));
INSERT INTO #Names
VALUES
('Done'),
('Barcel'),
('Barcelona'),
('Paris'),
('Parisinos'),
('Parisians');
我不确定您想如何处理它。我执行了这个查询,它在我的数据库中工作。它也是“完成”名称的上下文吗“完成”是正确的结果否,据我所知,它不包括“完成”。我相信“%”使“0”个额外字符也可以匹配。您需要确保至少有一个字符可供删除,您可以查看。我执行了这个查询,它在我的数据库中工作。它也是“完成”名称的上下文吗“完成”是正确的结果否,据我所知,它不包括“完成”。我相信“%”使“0”个额外字符也可以匹配。您需要确保至少有一个字符可供删除,您可以查看。基本上是做‘’