smw*_*dia 1 sql t-sql sql-server substring
我有一个包含如下值的列:
"AAAA\BBBBBBBB\CCC"(A,B,C部分长度不固定.)
如果它存在,我需要修剪\ CCC部分,如果不存在则不管它.
例如:
AAA\BBBBBB\CCC - > AAA\BBBBBB
AA\BBBB - > AA\BBBB
AA - > AA
对不起,我不够清楚,A,B,C部分不是字面上的ABC,它们可以是任何内容.
另外\ DDD\EEEE(等)也应该被删除
虽然在纯T-SQL中肯定有办法实现它,但它可能不会那么清晰.
您可能需要考虑使用基于SQLCLR的用户定义函数(UDF).有了这些,您将能够从Sql Server中的c#(或vb.net)的强大功能和清晰度中受益.
只需使它成为您的函数将接收您的字符串作为参数并返回您想要的输出作为标量值.从那时起,您将能够像使用其他任何UDF一样使用该功能.这样,您的代码将更容易编写(以及之后的读取/维护).
您的sqlclr函数可以像这样(伪代码)一样容易编写:
public static string SpecialSubstring(string input)
{
if (input == null) return null;
var builder = new StringBuilder();
var occurences = 0;
for (i = 0; i < input.Length; i++;)
{
var current = input[i];
if (current == '\') occurences += 1;
if (occurences >= 2) break;
builder.Append(current)
}
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
然后,从T-SQL:
SELECT
[owningschema].SpecialSubstring('AAA\BBBBBB\CCC'), -- returns 'AAA\BBBBBB'
[owningschema].SpecialSubstring('AA\BBBB'),, -- returns 'AA\BBBB'
[owningschema].SpecialSubstring('AA') -- returns 'AA'
Run Code Online (Sandbox Code Playgroud)
此页面将为您提供入门所需的全部内容: