Sql 使用坏数据挖掘列

Sql 使用坏数据挖掘列,sql,sql-server,trim,Sql,Sql Server,Trim,我的数据看起来像 ID LPNumber 1 30;#TEST123 2 302;#TEST1232 如何更新MyText以删除#之前的所有内容,包括#,因此我只剩下以下内容: ID LPNumber 1 TEST123 2 TEST1232 我已经查看了SQL Server Replace,但是想不出一种可行的方法来检查“;”在左侧的菜单中,提供了可用字符串函数的完整列表 UPDATE MyTable SET LPNumber =

我的数据看起来像

ID    LPNumber 
1     30;#TEST123
2     302;#TEST1232
如何更新MyText以删除#之前的所有内容,包括#,因此我只剩下以下内容:

ID    LPNumber 
1     TEST123
2     TEST1232
我已经查看了SQL Server Replace,但是想不出一种可行的方法来检查“;”

在左侧的菜单中,提供了可用字符串函数的完整列表

UPDATE
   MyTable
SET
   LPNumber = SUBSTRING(LPNumber, CHARINDEX('#', LPNumber)+1, 8000);
我将让您(从MSDN)计算出所需的过滤器,以防列中没有

编辑:

为什么是8000

最长的非LOB字符串长度为8000,因此它是“直到字符串结束”的缩写。您也可以将2147483647用于max列或使其一致

还有,LEN可以告诉你

  • 默认情况下处于启用状态
  • LEN
    忽略尾随空格
您需要使用DATALENGTH,但还需要知道数据类型,因为它计算的是字节,而不是字符。例如,见

因此,使用幻数可能是一种较小的邪恶…

使用CHARINDEX()、LEN()和RIGHT()代替


+1:以22秒的优势被击败。我需要更快的手指!:)[虽然,这对VARCHAR(max)适用吗?]@aF.-ooh,我不认为改变别人的答案是好的,除非是因为拼写错误等。8000的原因是它适用于除VARCHAR(max)afaik之外的所有东西,而且对我来说似乎是故意的。如果你不同意这一点,一定要发表评论,甚至你自己的答案,但编辑答案?Ooooooh…@aF.
CHAR\u LENGTH
SQL Server函数吗?我找不到它。@Dems:如果SET语句中缺少wantLPNumber=则更改为210000000。否则的话,这是一种享受。谢谢你,你真的很有天赋。如果存储了尾随空格(
SET ANSI PADDING ON
是默认设置),这会让你感到困惑,因为LEN会先修剪这些空格。有一种方法是我明显的疯狂…@gbn-我从未怀疑过你的疯狂:)@JamesKhan-在使用这个答案之前注意gbn的评论。
RIGHT(LPNumber, LEN(LPNumber) - CHARINDEX('#', LPNumber, 0))