MySql使用现有列创建和填充新列

MySql使用现有列创建和填充新列,sql,insert,new-operator,if-statement,Sql,Insert,New Operator,If Statement,我有一张有值的表。我试图创建一个新列,其行值将取决于现有列的行值。例如,在下表中,如果从索引6到索引7的id列的substr大于10,则该行新列的值应为索引1-4连字符substr(id,1,4)+1处id的子字符串。否则该值应为substr(id,1,4)-1连字符substr(id,1,4) 以下是表中每一行的算法: if substr(id, 5, 1) < 10 New Column value at that row = substr(id, 1, 4) - substr(

我有一张有值的表。我试图创建一个新列,其行值将取决于现有列的行值。例如,在下表中,如果从索引6到索引7的id列的substr大于10,则该行新列的值应为索引1-4连字符substr(id,1,4)+1处id的子字符串。否则该值应为substr(id,1,4)-1连字符substr(id,1,4)

以下是表中每一行的算法:

if substr(id, 5, 1) < 10
   New Column value at that row = substr(id, 1, 4) - substr(id, 1, 4)+1
else
   New Column value at that row = substr(id, 1, 4)-1 - substr(id, 1, 4)
if substr(id,5,1)<10
该行的新列值=substr(id,1,4)-substr(id,1,4)+1
其他的
该行的新列值=substr(id,1,4)-1-substr(id,1,4)
任何帮助都将不胜感激 谢谢

编辑: 所以我尝试了@scwagner的建议

SELECT
id,
(CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 
THEN CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1,'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)) 
ELSE CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED),'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)+1)   END) AS `New Column`,
Name
FROM new
选择
身份证件
(转换时的情况(子字符串(id,6,2),有符号)<10
然后CONCAT(CONVERT(SUBSTR(id,2,4),有符号)-1'-',CONVERT(SUBSTR(id,2,4),有符号))
ELSE CONCAT(CONVERT(SUBSTR(id,2,4),SIGNED),'-',CONVERT(SUBSTR(id,2,4,SIGNED)+1)END)作为'newcolumn',
名称
来自纽约
其中new是表的名称。但这将返回一个列,其中所有行值均为BLOB。
如何修复此问题?

您可能希望在更多数据上测试此问题,但在MySQL 5.1.41-3ubuntu12.8上使用您提供的测试数据进行了测试:

SELECT
  id,
  (CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 THEN CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1,'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)) ELSE CONCAT(CONVERT(SUBSTR(id, 2, 4),SIGNED),'-',CONVERT(SUBSTR(id, 2, 4),SIGNED)+1) END) AS `New Column`,
  Name
FROM
  <your table>
选择
身份证件
(当CONVERT(SUBSTR(id,6,2),SIGNED)<10时,CONCAT(CONVERT(SUBSTR(id,2,4),SIGNED)-1',-',CONVERT(SUBSTR(id,2,4,SIGNED)),否则CONCAT(CONVERT(SUBSTR(id,2,4),SIGNED),'-',CONVERT(SUBSTR(id,2,4,SIGNED)+1)结束)作为“新列”,
名称
从…起
找到了答案:

 SELECT
    id,
    (CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 
    THEN CONCAT(CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1 AS CHAR),'-',CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED) AS CHAR)) 
    ELSE CONCAT(CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED) AS CHAR),'-',CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED)+1) AS CHAR)   END) AS `New Column`,
    Name
    FROM new
选择
身份证件
(转换时的情况(子字符串(id,6,2),有符号)<10
然后CONCAT(CAST(CONVERT(SUBSTR(id,2,4),SIGNED)-1作为CHAR),'-',CAST(CONVERT(SUBSTR(id,2,4,SIGNED)作为CHAR))
ELSE CONCAT(CAST(CONVERT(SUBSTR(id,2,4),SIGNED)为CHAR),“-”,CAST(CONVERT(SUBSTR(id,2,4,SIGNED)+1)为CHAR)END)为'New Column`,
名称
来自纽约

如果子字符串(id,5,1)<10…
包含数字的1个字符的子字符串将始终小于10。你是说
substr(id,5,2)
?还有,你在哪个数据库上(MySQL,SQLServer,Oracle,POSGLAST…)?是的。我正在使用MySql。谢谢,但是我得到了一个包含所有值BLOB的列
 SELECT
    id,
    (CASE WHEN CONVERT(SUBSTR(id,6,2), SIGNED) < 10 
    THEN CONCAT(CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED)-1 AS CHAR),'-',CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED) AS CHAR)) 
    ELSE CONCAT(CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED) AS CHAR),'-',CAST(CONVERT(SUBSTR(id, 2, 4),SIGNED)+1) AS CHAR)   END) AS `New Column`,
    Name
    FROM new