【问题标题】:insert substring into new column将子字符串插入新列
【发布时间】:2012-10-05 12:46:56
【问题描述】:

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

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

我想复制前 3 个字母 ABC 并将其插入新列。让我们将这些列称为[full_id][ref_id]

从阅读看来 substring 可以做到这一点,但我在这里做错了。

INSERT INTO [ref_id]

SUBSTRING([full_id], 1, 3)

FROM db.Name

感谢您的帮助。


编辑:

更新字符串有效。但我发现我的数据存在问题,而且格式不正确。

有没有办法编写一个案例,如果子字符串不是 3 个字母,它会写入一个空值?

再次感谢,很抱歉有错误的数据。

【问题讨论】:

  • 如果子字符串少于3个字母是什么意思?如果 FULL_ID 中的值小于 4 个字符,则 substring(1,3) 将返回整个值。那么,你是说如果FULL_ID的长度小于3,在ref_id列中放入NULL?
  • 好的,所以格式应该是ABC-12D3-34EF 但是FULL_ID 的一些值是1234567ab-12345,所以如果开头的字符串不是ABC I想要在 REF_ID 列中有一个空值。这有帮助吗?

标签: sql sql-server-2008


【解决方案1】:

试试

UPDATE Name
SET ref_id = CASE WHEN CHARINDEX('-',full_id) = 4 THEN SUBSTRING(full_id,1,3) ELSE NULL END

这将使用 full_id 列的前 3 个字符为所有行设置 ref_id 列。

【讨论】:

  • 太棒了。现在似乎比我尝试做的要简单得多。
  • 查看我的编辑,应该可以解决您的问题。它说“仅当第 4 个字符是“-”时,才将 ref_id 设置为 full_id 的前三个字符。如果它不是破折号,则设置 ref_id = null
  • 总的来说,我对这个结果比我要求的原始结果更满意。并不是说我没有兴奋地跳到座位上,我是。不幸的是,我的数据存在更多问题,但我将通过研究您提供给我的代码来尝试解决这些问题。所以非常感谢!
【解决方案2】:

如果是同一张表中的列,则需要切换到更新语句。

UPDATE db.Name SET [ref_id] = SUBSTRING([full_id], 1, 3)

【讨论】:

  • 我想让这更复杂一点。请回头看看我的编辑。 =D
【解决方案3】:

也许你想要这样的东西:

Update db.Name set ref_id = substring([full_id], 1,3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多