我正在使用SQL Server 2005,我想提取字符串的alpha部分。SQL Server 2005 - 从字符串剥离仅Alpha值
即
从ABC123
,我想获得ABC
从AB1234
,我想获得AB
。 等等
最简单的方法是什么?
我正在使用SQL Server 2005,我想提取字符串的alpha部分。SQL Server 2005 - 从字符串剥离仅Alpha值
即
从ABC123
,我想获得ABC
从AB1234
,我想获得AB
。 等等
最简单的方法是什么?
始终字母数字,然后即XYZ123或XZ321等 - GordyII 3月2日 '10在0:26
我知道这是一个老的文章,但......如果上面的报价是真实的,那么这很容易...
SELECT LEFT(YourStringColumn, PATINDEX('%[0-9]%',YourStringColumn)-1)
FROM dbo.YourTable
+1,显然是这个问题的最佳答案! – 2012-03-08 22:24:57
如果总是有字母和数字之间的空间,尝试:
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)
您也可以考虑在SQL中但不在其他位置执行此操作(如果在您的方案中可能)。如果你解释了什么样的数据,你如何处理你的sql数据库以及使用它们的方式和方式,可能会提出一个更好的选择。
你有什么样的数据组合?例如只有A-Z和0-9?标点?或KM,发现字母,空格,数字? – gbn 2010-03-01 19:30:53
没有标点符号,只是A-Z,0-9。 – GordyII 2010-03-01 20:19:50
是模式字母+数字,还是像以下任何一种字符串:123ABC456或123ABC或ABC或123或A1B2C3? – 2010-03-01 20:36:37