2010-03-01 45 views
1

我正在使用SQL Server 2005,我想提取字符串的alpha部分。SQL Server 2005 - 从字符串剥离仅Alpha值

ABC123,我想获得ABC

AB1234,我想获得AB。 等等

最简单的方法是什么?

+1

你有什么样的数据组合?例如只有A-Z和0-9?标点?或KM,发现字母,空格,数字? – gbn 2010-03-01 19:30:53

+0

没有标点符号,只是A-Z,0-9。 – GordyII 2010-03-01 20:19:50

+0

是模式字母+数字,还是像以下任何一种字符串:123ABC456或123ABC或ABC或123或A1B2C3? – 2010-03-01 20:36:37

回答

1

始终字母数字,然后即XYZ123或XZ321等 - GordyII 3月2日 '10在0:26

我知道这是一个老的文章,但......如果上面的报价是真实的,那么这很容易...

SELECT LEFT(YourStringColumn, PATINDEX('%[0-9]%',YourStringColumn)-1) 
    FROM dbo.YourTable 
+0

+1,显然是这个问题的最佳答案! – 2012-03-08 22:24:57

1

您可以创建一个用户定义的函数,它将遍历字符并生成一个字符为字母的新字符串。

+0

几乎它。循环,数字表,不管。没有花哨的方法,真的 – gbn 2010-03-01 19:32:28

1

如果总是有字母和数字之间的空间,尝试:

DECLARE @String varchar(100) 
SET @String='ABC 123' 

SELECT LEFT(@String,LEN(@String)-CHARINDEX(' ',@String)) 

输出

------------------- 
ABC 

(1 row(s) affected) 

编辑 OP的评论后,假设数字之前没有空格:

DECLARE @String varchar(100) 
SET @String='ABCD123' 

;with Numbers AS 
(
    SELECT 1 AS Number,ISNUMERIC(SUBSTRING(@String,1,1)) AS Digit 
    UNION ALL 
    SELECT Number+1,ISNUMERIC(SUBSTRING(@String,Number+1,1)) AS Digit 
     FROM Numbers 
    WHERE Number<LEN(@String) 
) 
SELECT LEFT(@String,MAX(Number)) FROM Numbers WHERE Digit=0 
--OPTION (MAXRECURSION n) --if the string is longer than 100 characters uncomment this and set "n" to the string length 

输出:

------------------- 
ABCD 

(1 row(s) affected) 
+0

对不起,没有空格或定义字符。 – GordyII 2010-03-01 19:33:55

+1

@GordyII,那么你的问题有**坏**例 – 2010-03-01 19:36:36

+0

公平足够,将更正。我的appologies。 – GordyII 2010-03-01 20:18:45

0

您也可以考虑在SQL中但不在其他位置执行此操作(如果在您的方案中可能)。如果你解释了什么样的数据,你如何处理你的sql数据库以及使用它们的方式和方式,可能会提出一个更好的选择。