SQL截取两个特定值之间的文字
如有数据列T,值为1一别之后2两地相悬3只说是三四月5又谁知五六年……如何将1、2、3、5之间的值拆分出来,字数不固定,且拆分截断字符也不一定是数字求高手sql语句写法,...
如有数据列T,值为1一别之后2两地相悬3只说是三四月5又谁知五六年……
如何将1、2、3、5之间的值拆分出来,字数不固定,且拆分截断字符也不一定是数字
求高手sql语句写法,最好可以写个函数:
SELECT Fun_Split(T,'3','5') 得出"只说是三四月" 展开
如何将1、2、3、5之间的值拆分出来,字数不固定,且拆分截断字符也不一定是数字
求高手sql语句写法,最好可以写个函数:
SELECT Fun_Split(T,'3','5') 得出"只说是三四月" 展开
2个回答
展开全部
sql截取 两个特定值之间的文字
可以使用substring() 截取 和 charindex()
CHARINDEX函数调用方法如下:
CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
substring函数调用方法如下:
substring(string,startNumber, endNumber)
返回第一个参数中从第二个参数指定的位置开始、第三个参数指定的长度的子字符串。
例子:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
SubString("12345",2,3)
调用以下函数返回“2345”:
假设你要显示Northwind数据库Customer表前5行联系人列的Last Name。这是前5行数据
ContactName
------------------------------
Maria Anders
Ana Trujillo
Antonio Moreno
Thomas Hardy
Christina Berglund
你可以看到,CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开。我用CHARINDX函数确定两个名字中间空格的位置。通过这个方法,我们可以分析ContactName列的空格位置,这样我们可以只显示这个列的last name部分。这是显示Northwind的Customer表前5行last name的记录!
select top 5 substring(ContactName,charindex(’ ’,ContactName)+1 ,
len(ContactName)) as [Last Name] from Northwind.dbo.customers
下面是这个命令输出的结果。
Last Name
------------------------------
Anders
Trujillo
Moreno
Hardy
Berglund
可以使用substring() 截取 和 charindex()
CHARINDEX函数调用方法如下:
CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
substring函数调用方法如下:
substring(string,startNumber, endNumber)
返回第一个参数中从第二个参数指定的位置开始、第三个参数指定的长度的子字符串。
例子:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
SubString("12345",2,3)
调用以下函数返回“2345”:
假设你要显示Northwind数据库Customer表前5行联系人列的Last Name。这是前5行数据
ContactName
------------------------------
Maria Anders
Ana Trujillo
Antonio Moreno
Thomas Hardy
Christina Berglund
你可以看到,CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开。我用CHARINDX函数确定两个名字中间空格的位置。通过这个方法,我们可以分析ContactName列的空格位置,这样我们可以只显示这个列的last name部分。这是显示Northwind的Customer表前5行last name的记录!
select top 5 substring(ContactName,charindex(’ ’,ContactName)+1 ,
len(ContactName)) as [Last Name] from Northwind.dbo.customers
下面是这个命令输出的结果。
Last Name
------------------------------
Anders
Trujillo
Moreno
Hardy
Berglund
展开全部
你如果只要指定字符之间的,那么直接截取就行了啊
sqlserver:
select substring(t,charindex('3',t)+1,charindex('5',t)-charindex('3',t)-1)
sqlserver:
select substring(t,charindex('3',t)+1,charindex('5',t)-charindex('3',t)-1)
更多追问追答
追问
数字之间是可以的,但如果是英文或者汉字,应如何截取?
例如:T值为“一别之后 两地相悬 只说是三四月 又谁知五六年”
任意截取两个字或者两个词之间的文字,
如:截取“两地”、“三四”之间的文字,输出结果为“相悬 只说是”
追答
select substring(t,charindex('两地',t)+2,charindex('三四',t)-charindex('两地',t)-2)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询