Sql 在新列中插入子字符串

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个字母,

我有一个数据库,其中一列包含两条数据,例如名字和姓氏

格式大致为ABC-1D23-4F34

我想把前三个字母,ABC,复制并插入新的一栏。让我们调用这些列
[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
列中有一个空值。这有用吗?