LEN(x)>的情况我那么左(x,j)+ y ELSE x END

时间:2015-01-07 03:54:02

标签: sql sql-server tsql

我想知道SQL Server中是否有单个函数,或者至少是没有条件CASE的表单,它可以取代以下功能:

CASE WHEN LEN (character_expression) > result_length THEN LEFT (character_expression, resultWithoutPad_length) + padWith_expression ELSE character_expression END

那样

CREATE TABLE foo (bar VARCHAR (MAX));
INSERT INTO foo (bar) VALUES ('123456'), ('1234567'), ('12345678'), ('123456789'), ('1234567890'), ('12345678901'), ('123456789012');
SELECT CASE WHEN LEN (bar) > 10 THEN LEFT (bar, 7) + '...' ELSE bar END FROM foo;

将返回以下结果:

(No column name)
----------------
123456
1234567
12345678
123456789
1234567890
1234567...
1234567...

我尝试了STUFF (character_expression, start, length, replaceWith_expression),但我找不到修改方法以符合我的要求。

1 个答案:

答案 0 :(得分:1)

这是您应该在表示层中进行的操作,而不是在数据库级别。如果您想拥有不错的SQL,请选择要显示的字段,并在HTML或任何应用程序中添加省略号。

如果必须在数据库级别执行此操作,则可以编写UDF:

CREATE FUNCTION ellipsis(@str VARCHAR(MAX), @len INT) RETURNS VARCHAR(MAX)
AS
BEGIN
  SET @str = CASE WHEN LEN(@str) > @len THEN LEFT(@str, @len - 1) + '…' ELSE @str END
  RETURN @str
END;

GO

CREATE TABLE foo (bar VARCHAR (MAX));

INSERT INTO foo (bar) VALUES ('123456'), ('1234567'), ('12345678'), ('123456789'), ('1234567890'), ('12345678901'), ('123456789012');

SELECT dbo.ellipsis(bar, 7) FROM foo;

结果:

123456
1234567
123456…
123456…
123456…
123456…
123456…