修剪包含错误数据的列

时间:2011-12-23 10:40:00

标签: sql sql-server trim

我的数据看起来像

ID    LPNumber 
1     30;#TEST123
2     302;#TEST1232

如何更新MyText以删除#之前的所有内容并包含#,所以我留下以下内容:

ID    LPNumber 
1     TEST123
2     TEST1232

我看过SQL Server Replace,但想不出一种可行的方法来检查“;”

2 个答案:

答案 0 :(得分:6)

MSDN REPLACE page上,左侧的菜单提供了完整的字符串函数列表。

UPDATE
   MyTable
SET
   LPNumber = SUBSTRING(LPNumber, CHARINDEX('#', LPNumber)+1, 8000);

如果列中没有#,我会让你(从MSDN)找到所需的过滤器...

编辑:

为什么选择8000?

最长的非LOB字符串长度为8000,因此它是“直到字符串结尾”的简写。对于最大列,您也可以使用2147483647或使其保持一致。

此外,LEN可以帮助你。

您需要使用DATALENGTH但是您需要知道数据类型,因为这会计算字节数,而不是字符数。例如,请参阅https://stackoverflow.com/a/2557843/27535

所以使用魔法数字可能是一个较小的邪恶......

答案 1 :(得分:3)

使用CHARINDEX(),LEN()和RIGHT()代替。

RIGHT(LPNumber, LEN(LPNumber) - CHARINDEX('#', LPNumber, 0))