我正在考虑一个SQL查询,它返回前5个字符匹配的列中的所有条目。有任何想法吗? 我正在考虑任何前5个字符匹配的条目,而不是特定的条目。例如。
HelloA
HelloB
ThereC
ThereD
Something
将返回前四个条目:
HelloA
HelloB
ThereC
ThereD
编辑:我正在使用SQL92,所以不能使用左命令!
答案 0 :(得分:9)
试试这个:
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)
;
答案 1 :(得分:5)
听起来很容易......
在SQL Server中,这将是
的内容where Left(ColumnName,5) = '12345'
答案 2 :(得分:0)
尝试
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
)
答案 3 :(得分:0)
您没有指定DBMS。如果它支持Windowed Aggregate函数,那就是:
select *
from
(
select
tab.*,
count(*) over (partition by substring(col from 1 for 5) as cnt
from tab
) as dt
where cnt > 1
答案 4 :(得分:0)
您希望使用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