MySql使用现有列创建和填充新列
我有一张有值的表。我试图创建一个新列,其行值将取决于现有列的行值。例如,在下表中,如果从索引6到索引7的id列的substr大于10,则该行新列的值应为索引1-4连字符substr(id,1,4)+1处id的子字符串。否则该值应为substr(id,1,4)-1连字符substr(id,1,4) 以下是表中每一行的算法: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(
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