Sql 搜索varchar列,仅对匹配的数值进行搜索

Sql 搜索varchar列,仅对匹配的数值进行搜索,sql,sql-server,Sql,Sql Server,我有一个VARCHAR类型的列(PRODUCTNUMBER),可以包含如下数据: SEC123456 SEC-123456 12-35-46 123456 是否可以运行SQL Server查询,其中我只发送“123456”作为我的搜索数据,并将获得PRODUCTNUMBER中包含此数据的所有行的匹配项(即使PRODUCTNUMBER数据包含类似'SEC123456')的字符?对于连续字符: select * from t where productnumber like '%123456%'

我有一个
VARCHAR
类型的列(
PRODUCTNUMBER
),可以包含如下数据:

SEC123456
SEC-123456
12-35-46
123456

是否可以运行SQL Server查询,其中我只发送“123456”作为我的搜索数据,并将获得
PRODUCTNUMBER
中包含此数据的所有行的匹配项(即使
PRODUCTNUMBER
数据包含类似
'SEC123456'
)的字符?

对于连续字符:

select * from t where productnumber like '%123456%'
会有用的。如果数据中只有“-”,可以使用replace(productnumber“-”和“”。但是,如果它可以是许多其他非数字字符,则需要类似以下内容:


首先创建提取数值的函数

CREATE FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END
GO
然后


试试这个

SELECT*FROM tab WHERE REPLACE(PRODUCTNUMBER,“-”,”)比如“%123456%”
LIKE(%value%)操作符的问题是,如果我的数据是“1234567”och“0123456”,那么如果我查询“123456”,它们也将是匹配的。这很有效,但当你有数百万条记录时,速度会非常慢。但这是我最好的解决方案。我想我必须重新考虑,并在数据库中添加另一列,其中包含来自另一列的数值,该列可以包含非数字字符。
select * from TableName where dbo.udf_GetNumeric(PRODUCTNUMBER) like '%123456%'