缩短字符串长度

时间:2013-12-27 17:14:25

标签: sql tsql

我在一个表中有一个列,其中有一些名称对于它所连接的网站来说太大了。任何50或更大的东西都会导致问题。我已经写了这个,试图缩短基于添加make + model +四年的数字。我在while循环中遇到更新问题。也许我应该使用临时表并且接近这个完全错误。谢谢你的帮助。

SELECT *

FROM [Year] y

INNER JOIN Year_Model ym
ON y.YearId = ym.YearId

INNER JOIN Model m
on m.ModelId = ym.ModelId

INNER JOIN Make ma
on ma.MakeId = m.MakeId

--WHERE (len(m.name) + len(ma.name) + 4)>= 50

WHILE (len(m.name) + len(ma.name) + 4)>= 50
BEGIN
DECLARE @ModelId integer;
SET @ModelId = m.ModelId
DECLARE @NewModelName string;
SET @NewModelName = (Select Left(m.name, (len(m.name)-1))
UPDATE m
SET m.name = @NewModelName
WHERE @ModelId = m.ModelId
END
GO

2 个答案:

答案 0 :(得分:2)

不要缩短任何东西。您可能需要其他名称的完整名称。

您可以使用t-sql left()函数选择前x个字符。或者,您可以选择整个名称并使用应用程序代码根据需要对其进行格式化。

答案 1 :(得分:1)

试试这个:

UPDATE [Model] SET [name]=xx.ShortName
FROM 
(
    SELECT m.ModelID,LEFT(m.name,len(m.name)-1) as ShortName
    FROM [Year] y
    INNER JOIN Year_Model ym ON y.YearId = ym.YearId
    INNER JOIN Model m  on m.ModelId = ym.ModelId
    INNER JOIN Make ma  on ma.MakeId = m.MakeId
    WHERE (len(m.name) + len(ma.name) + 4)>= 50
) xx
WHERE xx.ModelID = [Model].ModelId

注意:LEFT应该是 LEFT(m.name,len(m.name)-1)

不是原版 的 LEFT(m.Name,LEN(m.Name(-1)))

但是,在运行实际的udpate之前,首先运行内部查询以确保看到所需的结果...