搜索varchar列,仅匹配数字值

时间:2015-12-15 16:32:22

标签: sql sql-server

我有一个PRODUCTNUMBER类型的列VARCHAR,可以包含这样的数据:

SEC123456
SEC-123456
12-35-46
123456

是否可以运行SQL Server查询,我只发送'123456'作为我的搜索数据,并且匹配PRODUCTNUMBER包含此数据的所有行(即使{{1}数据包含PRODUCTNUMBER)等字符?

2 个答案:

答案 0 :(得分:1)

首先创建提取数值的函数

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 TableName where dbo.udf_GetNumeric(PRODUCTNUMBER) like '%123456%'

试试这个

答案 1 :(得分:0)

对于连续字符的情况:

select * from t where productnumber like '%123456%'

会奏效。如果它只是' - '在您可以使用的数据中替换(productnumber,' - ','')。但如果它可能是许多其他非数字字符,你需要类似的东西:

SQL to return field with non-numeric characters removed in MySQL