我想从Name中检测所有数字以获取ID。我使用这段代码:
select Name, ID
from [my_table]
where [Name] like ('%000234%')
但我需要为许多名字工作。我尝试过像(000234,000235,...)中的名字,但它不起作用。是否有可能获得按姓名搜索的完整ID列表?
答案 0 :(得分:2)
如果要为特定数字范围选择名称
select Name, ID
from [my_table]
where [Name] like '%00023[4-9]%'
将搜索名称000234
- 000239
答案 1 :(得分:0)
将数据插入临时表。然后你可以将它与主表合并。
DECLARE @TempTable TABLE (TempName NVARCHAR(10))
INSERT INTO @TempTable
VALUES
('000234'),
('000235')
SELECT
A.Name,
A.ID
FROM
[my_table] A INNER JOIN
@TempTable B ON A.Name LIKE '%' + B.TempName + '%'
答案 2 :(得分:0)
为了清晰起见,添加了测试表。
CREATE TABLE #Test (
NameString varchar(25) )
INSERT INTO #Test (NameString)
SELECT 'Mike387592'
UNION ALL
SELECT 'Nancy2387'
UNION ALL
SELECT 'Tim0088297234'
WITH CTE AS (
SELECT
NameString
,PATINDEX('%[0-9]%', NameString) AS [Start]
,LEN(NameString) AS [End]
FROM #Test )
SELECT
NameString
,SUBSTRING(NameString, [Start], [End])
FROM CTE
答案 3 :(得分:0)
如果表中有大量名称具有非顺序编号且其中没有共享模式的名称,则收集该数据的一种方法是使用IN谓词并动态构建查询。
E.G。你想要名字号码为000412,001523& 001687。
您可以动态生成如下查询:
SELECT Name, ID
FROM [my_table]
WHERE Name IN ( '000412', '001523', '001687' )
动态查询可以从数据库或调用数据库的软件生成,但主要是不鼓励,因为它们构成安全威胁而且不可重用。不过,这是一个选择。
如果必须使用LIKE谓词,因为数字字符串周围还有其他字符,这样的内容就是生成的查询:
SELECT Name, ID
FROM [my_table]
WHERE Name LIKE '%000412%' OR
Name LIKE '%001523%' OR
Name LIKE '%001687%'