如何在MS SQL Server的列中查找和删除字母

时间:2018-09-11 10:55:36

标签: sql sql-server

我有一列字母数字ID,我们称它为[IDS]。

id只能是数字,但其中一些具有流浪字符。

例如:

[IDS]

 - 012345A
 - 23456789AF
 - 789789

我只想将它们转换为数字-因此输出为:

[IDS]
012345
23456789
789789

我想编写一些代码,以在该列中搜索字母(A-Z)中的所有字母并将其删除,以便提取数值。

我知道我可以进行一次replace(replace(replace(.... etc),但是对于字母表中的所有26个字母来说,这都不理想。

我现在正尝试使用“声明@”解决它,但这些似乎是针对特定字符串设计的,我希望搜索并替换整列。

使用Microsoft SQL Server。

谢谢

4 个答案:

答案 0 :(得分:5)

CREATE TABLE #Table11
    ([IDS] varchar(10))
;

INSERT INTO #Table11
    ([IDS])
VALUES
    ('012345A'),
    ('23456789AF'),
    ('789789')
;


SELECT SUBSTRING([IDS], PATINDEX('%[0-9]%', [IDS]), PATINDEX('%[0-9][^0-9]%', [IDS] + 't') - PATINDEX('%[0-9]%', 
                    [IDS]) + 1) AS IDS
FROM #Table11

输出

IDS
012345
23456789
789789

答案 1 :(得分:0)

首先创建此 UDF

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

现在将 function 用作

SELECT dbo.udf_GetNumeric(column_name) 
from table_name

SQL FIDDLE

我希望这可以解决您的问题。

Reference

答案 2 :(得分:0)

您可以创建一个函数:

CREATE FUNCTION getNumber(@string VARCHAR(1500))
    RETURNS VARCHAR(1500)
AS
BEGIN
    DECLARE @count int
    DECLARE @intNumbers VARCHAR(1500)
    SET @count = 0
    SET @intNumbers = ''

    WHILE @count <= LEN(@string)
    BEGIN 
        IF SUBSTRING(@string, @count, 1)>='0' and SUBSTRING (@string, @count, 1) <='9'
            BEGIN
                SET @intNumbers = @intNumbers + SUBSTRING (@string, @count, 1)
            END
        SET @count = @count + 1
    END
    RETURN @intNumbers
END
GO 

然后命名为:

SELECT dbo.getNumber('23456789AF') As "Number"

Number
23456789

Rextester Demo

答案 3 :(得分:0)

要把这个丑陋的野兽扔到这里...

SELECT REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE(REPLACE (
       REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE(REPLACE (
       REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE(
       REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE 
      (IDS, 'A', ''), 'B', ''), 'C', ''), 'D', ''), 'E', ''), 'F', ''), 'G', '') 
                    , 'H', ''), 'I', ''), 'J', ''), 'K', ''), 'L', ''), 'M', '') 
                    , 'N', ''), 'O', ''), 'P', ''), 'Q', ''), 'R', ''), 'S', '')
                    , 'T', ''), 'U', ''), 'V', ''), 'W', ''), 'X', ''), 'y', '')
                    , 'Z', '')    
FROM #Table11