用substring取数据长度的问题

野鼻孔 2016-03-15 04:52:25
各位大神,今天碰到个问题,

我需要取record_key列的数据进行处理
Reassign application '121204' to user 'test'
Reassign application '121204' to user 'test2'
Reassign application '1000119031' to user 'user5'
Reassign application '1000119031' to user 'user10'
第一个双引号里是‘申请号’,我想把相同的两条取出来比较其他字段,但是必须忽略后面的 to user 'test',
因此我想了个方法,用substring(record_key, 23, 35)

121204' to user 'test'
121204' to user 'test2'
1000119031' to user 'user5'
1000119031' to user 'user10'

如何只取到上面第一个冒号结束,既 121204' 这里的冒号
用charindex行不行,
求具体代码,谢谢。
...全文
668 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-03-15
  • 打赏
  • 举报
回复
你也可以这样: PATINDEX('%''[0-9]%',@s) 找到第一单引号开头后边是数字的位置 PATINDEX('%[0-9]''[^0-9]%',@s) --找到数字后为单引号再后面为字母的位置

 DECLARE @s VARCHAR(500)='Reassign application ''121204'' to user test'''
 SELECT SUBSTRING(@s,PATINDEX('%''[0-9]%',@s)+1,PATINDEX('%[0-9]''[^0-9]%',@s)-PATINDEX('%''[0-9]%',@s))
返回:121204
中国风 2016-03-15
  • 打赏
  • 举报
回复
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([record_key] nvarchar(70))
Insert #T
select N'Reassign APPLICATION ''121204'' TO USER ''test''' union all
select N'Reassign APPLICATION ''121204'' TO USER ''test2''' union all
select N'Reassign APPLICATION ''1000119031'' TO USER ''user5''' union all
select N'Reassign APPLICATION ''1000119031'' TO USER ''user10'''
Go
Select SUBSTRING([record_key],CHARINDEX('''',[record_key])+1,CHARINDEX('''',[record_key],CHARINDEX('''',[record_key])+1)-CHARINDEX('''',[record_key])-1) from #T
/*
121204
121204
1000119031
1000119031
*/
Ginnnnnnnn 2016-03-15
  • 打赏
  • 举报
回复
如果你是写死23的可以直接用
;WITH CTE (St) AS
(
SELECT 'Reassign application ''121204'' to user ''test'''
UNION ALL
SELECT 'Reassign application ''121204'' to user ''test2'''
UNION ALL
SELECT 'Reassign application ''1000119031'' to user ''user5'''
UNION ALL
SELECT 'Reassign application ''1000119031'' to user ''user10'''
)
SELECT Substring(St,23,CHARINDEX('''',St,24)-24)
	FROM CTE a
如果不是写死23的改成这样
;WITH CTE (St) AS
(
SELECT 'Reassign application ''121204'' to user ''test'''
UNION ALL
SELECT 'Reassign application ''121204'' to user ''test2'''
UNION ALL
SELECT 'Reassign application ''1000119031'' to user ''user5'''
UNION ALL
SELECT 'Reassign application ''1000119031'' to user ''user10'''
)
SELECT Substring(St,CHARINDEX('''',a.St)+1,CHARINDEX('''',St,CHARINDEX('''',a.St)+1)-CHARINDEX('''',a.St)-1)
	FROM CTE a
octwind 2016-03-15
  • 打赏
  • 举报
回复
select stuff(replace(record_key,'Reassign application ''',''),charindex('''',replace(record_key,'Reassign application ''','')),len(replace(record_key,'Reassign application ''','')),'') from 表
AcHerat 元老 2016-03-15
  • 打赏
  • 举报
回复
substring(record_key, charindex('''',record_key)+1, charindex(''' to',record_key) - charindex('''',record_key) - 1 ) 不确定是否可行,手打!

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧