Ang*_*ker 42 sql sql-server sql-server-2016
我试图分析出从涉及获取一个字符串值最后一个 指标一个的字符串.目前,我正在做一个涉及反转字符串的可怕黑客攻击:
SELECT REVERSE(SUBSTRING(REVERSE(DB_NAME()), 1,
CHARINDEX('_', REVERSE(DB_NAME()), 1) - 1))
Run Code Online (Sandbox Code Playgroud)
对我来说,这段代码几乎是不可读的.我刚刚升级到SQL Server 2016,我希望有更好的方法.在那儿?
Gor*_*off 123
如果你想要最后一个之后的所有内容_,那么使用:
select right(db_name(), charindex('_', reverse(db_name()) + '_') - 1)
Run Code Online (Sandbox Code Playgroud)
如果你以前想要一切,那么使用left():
select left(db_name(), len(db_name()) - charindex('_', reverse(db_name()) + '_'))
Run Code Online (Sandbox Code Playgroud)
use*_*704 11
写了2个函数,1 为所选字符返回LastIndexOf.
CREATE FUNCTION dbo.LastIndexOf(@source nvarchar(80), @pattern char)
RETURNS int
BEGIN
RETURN (LEN(@source)) - CHARINDEX(@pattern, REVERSE(@source))
END;
GO
Run Code Online (Sandbox Code Playgroud)
和1在此LastIndexOf之前返回一个字符串.也许对某人有用.
CREATE FUNCTION dbo.StringBeforeLastIndex(@source nvarchar(80), @pattern char)
RETURNS nvarchar(80)
BEGIN
DECLARE @lastIndex int
SET @lastIndex = (LEN(@source)) - CHARINDEX(@pattern, REVERSE(@source))
RETURN SUBSTRING(@source, 0, @lastindex + 1)
-- +1 because index starts at 0, but length at 1, so to get up to 11th index, we need LENGTH 11+1=12
END;
GO
Run Code Online (Sandbox Code Playgroud)
不,SQL 服务器没有 LastIndexOf。
这是可用的字符串函数
但是你总是可以创建自己的函数
CREATE FUNCTION dbo.LastIndexOf(@source text, @pattern char)
RETURNS
AS
BEGIN
DECLARE @ret text;
SELECT into @ret
REVERSE(SUBSTRING(REVERSE(@source), 1,
CHARINDEX(@pattern, REVERSE(@source), 1) - 1))
RETURN @ret;
END;
GO
Run Code Online (Sandbox Code Playgroud)
CREATE FUNCTION dbo.LastIndexOf(@text NTEXT, @delimiter NTEXT)
RETURNS INT
AS
BEGIN
IF (@text IS NULL) RETURN NULL;
IF (@delimiter IS NULL) RETURN NULL;
DECLARE @Text2 AS NVARCHAR(MAX) = @text;
DECLARE @Delimiter2 AS NVARCHAR(MAX) = @delimiter;
DECLARE @Index AS INT = CHARINDEX(REVERSE(@Delimiter2), REVERSE(@Text2));
IF (@Index < 1) RETURN 0;
DECLARE @ContentLength AS INT = (LEN('|' + @Text2 + '|') - 2);
DECLARE @DelimiterLength AS INT = (LEN('|' + @Delimiter2 + '|') - 2);
DECLARE @Result AS INT = (@ContentLength - @Index - @DelimiterLength + 2);
RETURN @Result;
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55657 次 |
| 最近记录: |