从字符串中选择正确的字母
selecting the correct letter from a string
CREATE TABLE #tmpTbl (m VARCHAR(100))
INSERT INTO #tmpTbl VALUES
(',[Undergraduate1]')
,(',[Undergraduate10]')
,(',[Undergraduate11]')
;
GO
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)) as b from #tmpTbl
drop table #tmpTbl
您好,根据上面的 tmptable 和 select 语句,结果如下。
a | b
-------------------------------------------------------
,[Undergraduate | 1]
,[Undergraduate | 10]
,[Undergraduate | 11]
不过我希望它是这样的。
a | b
-------------------------------------------------------
,[Undergraduate | 1
,[Undergraduate | 10
,[Undergraduate | 11
我怎样才能做到这一点?我尝试了很多与 PATINDEX、LEFT、RIGHT、SUBSTRING、LEN 的组合。但无法正确处理 B 列中的 ]
您可以使用替换来删除 ]。狡猾,但它实现了你想要的
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)),']','') as b from #tmpTbl
备选方案: 反转字符串,删除第一个字符的子字符串,反转
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
REVERSE(SUBSTRING(REVERSE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m))),2,LEN(M))) as b from #tmpTbl
您可以使用 REPLACE
将 ]
替换为 ''
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)), ']', '') as b from #tmpTbl
我倾向于使用 stuff()
用于此目的:
select replace(stuff(m, 1, patindex(m, '%[0-9]%'), ''), ']', '')
这是一种替代方法,它会去除所有文本,只留下数字。
SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1)
FROM (
SELECT subsrt = SUBSTRING(m, pos, LEN(m))
FROM (
SELECT m, pos = PATINDEX('%[0-9]%', m)
FROM #tmpTbl
) d
) t
CREATE TABLE #tmpTbl (m VARCHAR(100))
INSERT INTO #tmpTbl VALUES
(',[Undergraduate1]')
,(',[Undergraduate10]')
,(',[Undergraduate11]')
;
GO
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)) as b from #tmpTbl
drop table #tmpTbl
您好,根据上面的 tmptable 和 select 语句,结果如下。
a | b
-------------------------------------------------------
,[Undergraduate | 1]
,[Undergraduate | 10]
,[Undergraduate | 11]
不过我希望它是这样的。
a | b
-------------------------------------------------------
,[Undergraduate | 1
,[Undergraduate | 10
,[Undergraduate | 11
我怎样才能做到这一点?我尝试了很多与 PATINDEX、LEFT、RIGHT、SUBSTRING、LEN 的组合。但无法正确处理 B 列中的 ]
您可以使用替换来删除 ]。狡猾,但它实现了你想要的
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)),']','') as b from #tmpTbl
备选方案: 反转字符串,删除第一个字符的子字符串,反转
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
REVERSE(SUBSTRING(REVERSE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m))),2,LEN(M))) as b from #tmpTbl
您可以使用 REPLACE
将 ]
替换为 ''
select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)), ']', '') as b from #tmpTbl
我倾向于使用 stuff()
用于此目的:
select replace(stuff(m, 1, patindex(m, '%[0-9]%'), ''), ']', '')
这是一种替代方法,它会去除所有文本,只留下数字。
SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1)
FROM (
SELECT subsrt = SUBSTRING(m, pos, LEN(m))
FROM (
SELECT m, pos = PATINDEX('%[0-9]%', m)
FROM #tmpTbl
) d
) t