SQL сопоставления с образцом на первых 5 символах
Я думаю о запросе SQL, который возвращает мне все записи из столбца, первые 5 символов которого совпадают. Есть идеи? Я думаю о записях, где совпадают ЛЮБЫЕ первые 5 символов, а не о конкретных. Например
HelloA
HelloB
ThereC
ThereD
Something
вернет первые четыре записи:
HelloA
HelloB
ThereC
ThereD
РЕДАКТИРОВАТЬ: я использую SQL92, поэтому не могу использовать левую команду!
5 ответов
Решение
Попробуй это:
SELECT *
FROM YourTable
WHERE LEFT(stringColumn, 5) IN (
SELECT LEFT(stringColumn, 5)
FROM YOURTABLE
GROUP BY LEFT(stringColumn, 5)
HAVING COUNT(*) > 1
)
При этом выбираются первые 5 символов, группируются по ним и возвращаются только те, которые встречаются более одного раза.
Или с подстрокой:
SELECT * FROM YourTable
WHERE substring(stringColumn,1,5) IN (
SELECT substring(stringColumn,1,5)
FROM YOURTABLE
GROUP BY substring(stringColumn,1,5)
HAVING COUNT(*) > 1)
;
Звучит достаточно просто...
В SQL Server это было бы что-то вроде
where Left(ColumnName,5) = '12345'
Пытаться
Select *
From tbl t1
Where exists (
Select 1
From tbl t2
Where left(t1.str, 5) = left(t2.str)
Group by left(t2.str, 5)
Having count(1) > 1
)
Вы хотите работать с подходом CTE.
Что-то вроде этого:
with CountriesCTE(Id, Name)
as (
select Id, Name from Countries
)
select distinct Countries.Name
from CountriesCTE, Countries
where left(CountriesCTE.Name,5) = left(Countries.Name,5) and CountriesCTE.Id <> Countries.Id
Вы не указали свою СУБД. Если он поддерживает оконные агрегатные функции, это:
select *
from
(
select
tab.*,
count(*) over (partition by substring(col from 1 for 5) as cnt
from tab
) as dt
where cnt > 1