SQL Server子字符串无上限

Lud*_*ert 1 sql sql-server

SQL Server中最好的方法是什么

SELECT 
    SUBSTRING('CATCH ME IF YOU CAN', 2, 10000)
    -- ATCH ME IF YOU CAN
Run Code Online (Sandbox Code Playgroud)

没有上限?

Lar*_*rnu 5

使用STUFF替代(的东西(的Transact-SQL) ):

SELECT STUFF('CATCH ME IF YOU CAN',1,1,'');
Run Code Online (Sandbox Code Playgroud)

在此,STUFF将位置1处的1个字符替换为字符串''。第二个参数是开始位置,第三个参数是要替换的字符数(从该位置开始)。第四个是替换字符串。

因此,作为另一个示例,您可以执行以下操作:

SELECT STUFF('2019-07-09 11:38:00',11,1,'T');
Run Code Online (Sandbox Code Playgroud)

它将位置11的1个字符替换'T'为返回的字符,'2019-07-09T11:38:00'将上述值更改为ISO8601格式。如您所见,要替换的字符串的长度也不必与替换字符串的长度相同(实际上,第3个参数的值可以为0,这意味着不替换任何字符,并且“替换”将字符串简单地注入到现有值中)。


Aru*_*mar 5

LEN()与变量一起使用

DECLARE @Val AS VARCHAR (MAX) = 'CATCH ME IF YOU CAN';
SELECT SUBSTRING(@Val, 2, LEN(@Val));
Run Code Online (Sandbox Code Playgroud)

或直接与LEN()

SELECT SUBSTRING('CATCH ME IF YOU CAN', 2, LEN('CATCH ME IF YOU CAN'));
Run Code Online (Sandbox Code Playgroud)