当前位置:  开发笔记 > 数据库 > 正文

String.Format类似于T-SQL中的功能?

如何解决《String.Format类似于T-SQL中的功能?》经验,为你挑选了3个好方法。

我正在寻找T-SQL中的内置函数/扩展函数,用于字符串操作,类似于String.Format.NET中的方法.



1> g2server..:

如果您使用的是SQL Server 2012及更高版本,则可以使用FORMATMESSAGE.例如.

DECLARE @s NVARCHAR(50) = 'World';
DECLARE @d INT = 123;
SELECT FORMATMESSAGE('Hello %s, %d', @s, @d)
-- RETURNS 'Hello World, 123'

来自MSDN的更多示例:FORMATMESSAGE

SELECT FORMATMESSAGE('Signed int %i, %d %i, %d, %+i, %+d, %+i, %+d', 5, -5, 50, -50, -11, -11, 11, 11);
SELECT FORMATMESSAGE('Signed int with leading zero %020i', 5);
SELECT FORMATMESSAGE('Signed int with leading zero 0 %020i', -55);
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50);
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50);
SELECT FORMATMESSAGE('Unsigned hexadecimal %x, %X, %X, %X, %x', 11, 11, -11, 50, -50);
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o, %#o', 50, -50);
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#x, %#X, %#X, %X, %x', 11, 11, -11, 50, -50);
SELECT FORMATMESSAGE('Hello %s!', 'TEST');
SELECT FORMATMESSAGE('Hello %20s!', 'TEST');
SELECT FORMATMESSAGE('Hello %-20s!', 'TEST');
SELECT FORMATMESSAGE('Hello %20s!', 'TEST');

笔记:

2012年无证

限制为2044个字符

要转义%符号,您需要加倍它.

如果您在扩展事件中记录错误,则调用将FORMATMESSAGE显示为(无害)错误


@bijayk它只接受特定的占位符名称,例如,%s代表字符串,%i代表整数.

2> Josh..:

看看xp_sprintf.以下示例.

DECLARE @ret_string varchar (255)
EXEC xp_sprintf @ret_string OUTPUT, 
    'INSERT INTO %s VALUES (%s, %s)', 'table1', '1', '2'
PRINT @ret_string

结果如下所示:

INSERT INTO table1 VALUES (1, 2)

刚刚发现字符串的max size(255 char limit)问题,所以你可以使用另一种函数:

create function dbo.fnSprintf (@s varchar(MAX), 
                @params varchar(MAX), @separator char(1) = ',')
returns varchar(MAX)
as
begin
declare @p varchar(MAX)
declare @paramlen int

set @params = @params + @separator
set @paramlen = len(@params)
while not @params = ''
begin
    set @p = left(@params+@separator, charindex(@separator, @params)-1)
    set @s = STUFF(@s, charindex('%s', @s), 2, @p)
    set @params = substring(@params, len(@p)+2, @paramlen)
end
return @s
end

要获得与上面相同的结果,请按以下方式调用该函数:

print dbo.fnSprintf('INSERT INTO %s VALUES (%s, %s)', 'table1,1,2', default)


只是一个FYI,如果你的任何一个参数包含一个逗号,那么你运气不好.如果你碰巧偶然通过一个,你会遇到一些麻烦,弄清楚出了什么问题.

3> 小智..:

我创建了一个用户定义的函数来模仿string.format功能.你可以使用它.

的StringFormat功能于SQL

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有