我的数据库中有以下条目:
images/test.jpg
我想修改条目,以便得到:test
所以基本上,我想要/
之后和.
之前的所有内容
我该如何解决?
答案 0 :(得分:42)
如果您想使用SQL将其从表中删除,请查看以下有助于您的功能:SUBSTRING
和CHARINDEX
。您可以使用它们来修剪条目。
可能的查询将如下所示(其中col
是包含图像目录的列的名称:
SELECT SUBSTRING(col, LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) + 1,
LEN(col) - LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) - LEN(SUBSTRING(
col, CHARINDEX ('.', col), LEN(col))));
有点丑陋的野兽。它还取决于'dir / name.ext'的标准格式。
修改强>
这一个(受praveen启发)更通用,处理不同长度的扩展:
SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('/', col))) + 1, LEN(col) - LEN(LEFT(col,
CHARINDEX ('/', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('.', col))) - 1);
答案 1 :(得分:29)
使用以下功能
left(@test, charindex('/', @test) - 2)
答案 2 :(得分:18)
在
SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('/',ParentBGBU,0)) FROM dbo.tblHCMMaster;
在
SELECT SUBSTRING(ParentBGBU,CHARINDEX('-',ParentBGBU)+1,LEN(ParentBGBU)) FROM dbo.tblHCMMaster
答案 3 :(得分:5)
declare @T table
(
Col varchar(20)
)
insert into @T
Select 'images/test1.jpg'
union all
Select 'images/test2.png'
union all
Select 'images/test3.jpg'
union all
Select 'images/test4.jpeg'
union all
Select 'images/test5.jpeg'
Select substring( LEFT(Col,charindex('.',Col)-1),charindex('/',Col)+1,len(LEFT(Col,charindex('.',Col)-1))-1 )
from @T
答案 4 :(得分:2)
我刚刚在我的一份报告中做到了这一点,非常简单。
试试这个:
= MID(字段!。价值,8,4)
注意:这对我有用,因为我试图得到的值是一个常数,不确定它你想要获得的是一个常数。
答案 5 :(得分:2)
SELECT SUBSTRING('ravi1234 @ gmail.com',1,(CHARINDEX('@','ravi1234@gmail.com')-1))之前,RIGHT('ravi123@gmail.com',(CHARINDEX( '@','ravi123@gmail.com')+ 1))之后
答案 6 :(得分:1)
我做了一个更通用的方法:
所以:
DECLARE @a NVARCHAR(MAX)='images/test.jpg';
--Touch here
DECLARE @keysValueToSearch NVARCHAR(4000) = '/'
DECLARE @untilThisCharAppears NVARCHAR(4000) = '.'
DECLARE @keysValueToSearchPattern NVARCHAR(4000) = '%' + @keysValueToSearch + '%'
--Nothing to touch here
SELECT SUBSTRING(
@a,
PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch),
CHARINDEX(
@untilThisCharAppears,
@a,
PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch)
) -(PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch))
)
答案 7 :(得分:0)
我知道这已经有一段时间..但这是一个想法
declare @test varchar(25) = 'images/test.jpg'
select
@test as column_name
, parsename(replace(@test,'/','.'),1) as jpg
,parsename(replace(@test,'/','.'),2) as test
,parsename(replace(@test,'/','.'),3) as images
答案 8 :(得分:0)
以下查询为您提供' - '之前的数据 Ex-W12345A-4S
SELECT SUBSTRING(Column_Name,0,CHARINDEX(' - ',Column_Name))为'new_name' 来自[abc]。
输出 - W12345A
答案 9 :(得分:0)
我发现Royi Namir的答案很有用,但在其上进行了扩展,将其创建为一个函数。我将这些变量重命名为对我有意义的变量,但如果需要,你可以很容易地将它们翻译回来。
此外,Royi的答案中的代码已经处理了搜索到的字符不存在的情况(它从字符串的开头开始),但我还想处理字符的情况。被搜查不存在。
在这种情况下,它以类似的方式从搜索的字符开始并将其余字符返回到字符串的末尾。
CREATE FUNCTION [dbo].[getValueBetweenTwoStrings](@inputString
NVARCHAR(4000), @stringToSearchFrom NVARCHAR(4000), @stringToSearchTo
NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @retVal NVARCHAR(4000)
DECLARE @stringToSearchFromSearchPattern NVARCHAR(4000) = '%' +
@stringToSearchFrom + '%'
SELECT @retVal = SUBSTRING (
@inputString,
PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom),
(CASE
CHARINDEX(
@stringToSearchTo,
@inputString,
PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
WHEN
0
THEN
LEN(@inputString) + 1
ELSE
CHARINDEX(
@stringToSearchTo,
@inputString,
PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
END) - (PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
)
RETURN @retVal
END
用法:
SELECT dbo.getValueBetweenTwoStrings('images/test.jpg','/','.') AS MyResult
答案 10 :(得分:0)
----选择/之前的字符,包括/
选择SUBSTRING('abcde / wxyz',0,CHARINDEX('/','abcde / wxyz')+ 1)
-在/包括/
之后选择字符选择SUBSTRING('abcde / wxyz',CHARINDEX('/','abcde / wxyz'),LEN('abcde / wxyz'))
答案 11 :(得分:0)
您可以尝试以下方法:
const openvpnmanager = require('node-openvpn');
const opts = {
host: '147.0.40.145',
port: 38473,
timeout: 1500, //timeout for connection - optional, will default to 1500ms if undefined
logpath: 'log.txt' //optional write openvpn console output to file, can be relative path or absolute
};
const auth = {
user: '{{add user name}}',
pass: '9c359ad1ebeec200',
};
const openvpn = openvpnmanager.connect(opts)
openvpn.on('connected', () => {
console.log("Connected to VPN successfully...");
});
答案 12 :(得分:0)
受Josien的启发,我想知道这种简化。
这还行吗?更短:
SELECT SUBSTRING(col, CHARINDEX ('/', col) + 1, CHARINDEX ('.', col) - CHARINDEX ('/', col) - 1);
(由于公司SQL Server的正确问题,我目前无法测试,这本身就是一个问题)
答案 13 :(得分:0)
只需尝试LEFT,RIGHT,CHARINDEX
select
LEFT((RIGHT(a.name,((CHARINDEX('/', name))+1))),((CHARINDEX('.', (RIGHT(a.name,
((CHARINDEX('/', name))+1)))))-1)) splitstring,
a.name
from
(select 'images/test.jpg' as name)a
答案 14 :(得分:0)
我收到一些无效的长度错误。所以我做了这个功能,这不应该给任何长度的问题。另外,当您找不到搜索到的文本时,它将返回NULL。
CREATE FUNCTION [FN].[SearchTextGetBetweenStartAndStop](@string varchar(max),@SearchStringToStart varchar(max),@SearchStringToStop varchar(max))
RETURNS varchar(max)
BEGIN
SET @string = CASE
WHEN CHARINDEX(@SearchStringToStart,@string) = 0
OR CHARINDEX(@SearchStringToStop,RIGHT(@string,LEN(@string) - CHARINDEX(@SearchStringToStart,@string) + 1 - LEN(@SearchStringToStart))) = 0
THEN NULL
ELSE SUBSTRING(@string
,CHARINDEX(@SearchStringToStart,@string) + LEN(@SearchStringToStart) + 1
,(CHARINDEX(@SearchStringToStop,RIGHT(@string,LEN(@string) - CHARINDEX(@SearchStringToStart,@string) + 1 - LEN(@SearchStringToStart)))-2)
)
END
RETURN @string
END
答案 15 :(得分:0)
如果 Input= pg102a-wlc01s.png.intel.com 并且输出应该是 pg102a-wlc01s
我们可以使用以下查询:
select Substring(pc.name,0,charindex('.',pc.name,0)),pc.name from tbl_name pc