我想知道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)
,但我找不到修改方法以符合我的要求。
答案 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…