【问题标题】:Insert data with a SUBSTRING in the SELECT在 SELECT 中插入带有 SUBSTRING 的数据
【发布时间】:2016-04-04 20:56:08
【问题描述】:

我如何在SELECT 中使用SUBSTRING INSERT 数据?

我尝试了以下方法,但没有成功:

INSERT INTO PHONE( 
        ID_CLIENT,
        COD,
        PHONE) 
 SELECT (ID_CLI,
        SUBSTRING(PHONE,0,3), '',
        SUBSTRING(PHONE,3,9), '')
 FROM [dbo].TABLE_1
 WHERE ID_PHONE = 2

我做错了什么?

【问题讨论】:

  • 您应该更换键盘。它似乎卡在 CAPS LOCK ON 上。现在停止对我们大喊大叫!!!
  • 请不要使用全部大写。
  • 您的选择语句有 5 列,插入有 3 列
  • 您收到的错误信息是什么?

标签: sql sql-server substring


【解决方案1】:
INSERT INTO PHONE(     
    ID_CLIENT,    
    COD,       
    PHONE) 
SELECT (ID_CLI,    
    SUBSTRING(PHONE,0,3),    
    SUBSTRING(PHONE,3,9)    
 FROM [dbo].TABLE_1    
 WHERE ID_PHONE = 2 

【讨论】:

    【解决方案2】:

    SQL 与其他语言不同。计算字符串时,计数不会从零开始,就像 python 和其他类似语言一样,它从 1 开始。我注意到,在您的 substring() 函数中,您将起始值插入为 0。这在某些语言中是正确的,但在 SQL 中,第一个字符是 1 而不是零。此外,在最后一个子字符串之后,请务必从原始 select 语句中关闭您的 ()。您在选择之后、ID_CLI 列之前打开了 (),但没有在语句末尾提供关闭 ()。无论如何,我不是这门语言的专业人士,但我希望我的意见对您尝试做的事情有所帮助。我相信这可能会起作用,如果不是的话,我可能会遗漏一些东西,(同样,我是 SQL 的新手,如果这不正确,请原谅我)

    INSERT INTO PHONE(     
        ID_CLIENT,    
        COD,       
        PHONE) 
    SELECT (ID_CLI,    
        SUBSTRING(PHONE,1,4),    
        SUBSTRING(PHONE,4,10))    
    FROM [dbo].TABLE_1    
    WHERE ID_PHONE = 2 
    

    【讨论】:

      【解决方案3】:

      您似乎正在选择五列并试图插入另一个表的三列。确保行数匹配。看来您可能正在尝试将子字符串与空字符串连接起来,您需要使用 CONCAT 函数。

      【讨论】:

        【解决方案4】:

        你可以这样做:

        WITH CteData
        AS
        (
         SELECT ID_CLI,SUBSTRING(PHONE,0,3) AS COD,SUBSTRING(PHONE,3,9) AS PHONE
        FROM [dbo].TABLE_1
        WHERE ID_PHONE = 2
        )
        INSERT INTO PHONE(ID_CLIENT,COD,PHONE) 
        SELECT CteData.ID_CLI,CteData.COD,CteData.PHONE FROM CteData
        

        但首先您需要删除像 '' 这样的空白空间,这会给 INSERT 语句造成印象,即您在 SELECT 上的列比 INSERT 多,我确实使用 CTE 只是为了使代码可读

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-19
          • 2012-11-25
          • 2021-03-07
          • 2021-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多