我正在使用T-SQL。 我有这两个字符串。
AX20-xxxxxxxx
T11-xxxxxxxxx
对于第一个我希望能够拉AX
对于第二个,我只想T
。
答案 0 :(得分:4)
看看PatIndex()
Declare @S varchar(max) = 'AX20-xxxxxxxx'
Select Left(@S,PatIndex('%[0-9]%',@S)-1)
返回
AX
答案 1 :(得分:3)
假设您需要从开头到第一个数字的出现获取子字符串,请使用PATINDEX
获取第一个数字的索引,然后使用SUBSTRING
。
select substring(colname, 1, patindex('%[0-9]%',colname)-1)
from tablename
答案 2 :(得分:3)
在SQL Server中,您可以使用PATINDEX()获取第一个数字,然后使用LEFT()函数获取左子字符串
WITH T AS
(
SELECT 'AX20-xxxxxxxx' as Str
UNION ALL
SELECT 'T11-xxxxxxxxx' as Str
)
SELECT LEFT(Str,PATINDEX('%[0-9]%',Str)-1) FROM T
答案 3 :(得分:0)
好的,我很确定这是针对像sql这样的DBMS语言,但我将在Python中发布一个答案。请记住,这可能是 NOT 最有效的解决方案,但却是我能想到的唯一解决方案。它应该很容易实现到任何语言,但我不确定sql。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
def pulltext(text):
pulled = []
for x in text:
if x == '-':
index = text.index('-')
for y in text[:index]:
if is_number(y):
pass
else:
pulled.append(y)
pulled = ''.join(pulled)
return pulled
textinput = input('String to pull characters from')
print(pulltext(textinput))
由于这是错误的语言,让我们来看看:
如果字符串包含数字,is_number
函数返回True
,因为python没有这样的东西。
首先我们遍历字符串并找到' - '这是for循环。
然后我们将文本从开头切片到' - '所在的索引 (这就是':'的含义,从开头到' - '的索引)
接下来我们在' - '(for循环)之前浏览每个字符;并检查它是否与前一个函数一致。如果它不是数字,请将其添加到列表中;
最后,只需将列表加入字符串,然后打印该字符串。
我希望有所帮助,并且我倾向于使用错误的语言,但我认为python是解释逻辑的最佳语言:)