Sql 在新列中插入子字符串
我有一个数据库,其中一列包含两条数据,例如名字和姓氏 格式大致为ABC-1D23-4F34 我想把前三个字母,ABC,复制并插入新的一栏。让我们调用这些列Sql 在新列中插入子字符串,sql,sql-server-2008,Sql,Sql Server 2008,我有一个数据库,其中一列包含两条数据,例如名字和姓氏 格式大致为ABC-1D23-4F34 我想把前三个字母,ABC,复制并插入新的一栏。让我们调用这些列[full\u id]和[ref\u id] 从阅读它看起来像子字符串能够做到这一点,但我在这里做了一些错误的事情 插入[ref\u id] 子字符串([full_id],1,3) 来自db.Name 谢谢你的帮助 编辑: 更新字符串起作用了。但我发现我的数据有问题,而且格式不全 有没有一种方法可以编写这样一种情况:如果子字符串不是3个字母,
[full\u id]
和[ref\u id]
从阅读它看起来像子字符串能够做到这一点,但我在这里做了一些错误的事情
插入[ref\u id]
子字符串([full_id],1,3)
来自db.Name
谢谢你的帮助
编辑: 更新字符串起作用了。但我发现我的数据有问题,而且格式不全 有没有一种方法可以编写这样一种情况:如果子字符串不是3个字母,它会写入一个空值 再次感谢,很抱歉有错误的数据。再试一次
UPDATE Name
SET ref_id = CASE WHEN CHARINDEX('-',full_id) = 4 THEN SUBSTRING(full_id,1,3) ELSE NULL END
这将使用完整id列的前3个字符为所有行设置ref_id列。如果它是同一表中的一列,则需要切换到update语句
UPDATE db.Name SET [ref_id] = SUBSTRING([full_id], 1, 3)
也许你想要这样的东西:
Update db.Name set ref_id = substring([full_id], 1,3)
令人惊叹的。现在看起来比我想做的简单多了。看我的编辑,这应该可以解决你的问题。它表示“仅当第四个字符是a时,才将ref_id设置为full_id的前三个字符”-“。如果不是破折号,请设置ref_id=null。总体而言,我对这个结果比我要求的原始结果更满意。不是说我不是兴奋地跳到座位上,我是。不幸的是,我的数据有更多的问题,但我将尝试通过研究您提供给我的代码来解决这些问题。所以非常感谢你!我想把这件事再复杂一点。请回头看看我的编辑=D如果子字符串少于3个字母,你是什么意思?如果FULL_ID中的值小于4个字符,子字符串(1,3)将返回整个值。那么,你是说如果FULL_ID的长度小于3,那么在ref_ID列中输入NULL?好的,因此,格式应该是
ABC-12D3-34EF
,但是FULL\u ID
的一些值是1234567
或ab-12345
,因此如果开头的字符串不是ABC,我希望REF\u ID
列中有一个空值。这有用吗?