MySQL SubString返回Integer

时间:2014-03-18 15:50:23

标签: php mysql sql

我有一个名为identifier的varchar(128)字段的表。它应该得到一个3个字母的标识符,后跟一个索引编号:

ABC-1234

在过去的某个时刻,有一个错误,大约有5,000条记录输入为:

ABC-12345

我们的数字不会那么高,所以这些值用零填充(0)。

我写了一个脚本,以确保我的Microsoft T-SQL术语能够在这个MySQL数据库中正常工作,但我很震惊地看到,看起来像是MySQL,将我的值加在一起:

SELECT
  identifier,
  SUBSTR(cast(identifier as char),1,4) as 'p',
  SUBSTR(cast(identifier as char),6) as 'q',
  SUBSTR(cast(identifier as char),1,4)+SUBSTR(cast(identifier as char),6) as 'p+q'
FROM drawing_table where length(identifier)=9
order by identifier desc;

以下是输出的片段:

identifier,p,q,p+q
STO-00021,STO-,0021,21
STO-00020,STO-,0020,20
STO-00019,STO-,0019,19
STO-00018,STO-,0018,18
STO-00017,STO-,0017,17
STO-00016,STO-,0016,16
STO-00015,STO-,0015,15
STO-00014,STO-,0014,14
STO-00013,STO-,0013,13
STO-00012,STO-,0012,12
STO-00011,STO-,0011,11
STO-00010,STO-,0010,10
STO-00009,STO-,0009,9
STO-00008,STO-,0008,8
STO-00007,STO-,0007,7
STO-00006,STO-,0006,6
STO-00005,STO-,0005,5
STO-00004,STO-,0004,4
STO-00003,STO-,0003,3
STO-00002,STO-,0002,2
STO-00001,STO-,0001,1
STA-00166,STA-,0166,166
STA-00165,STA-,0165,165
STA-00164,STA-,0164,164
STA-00163,STA-,0163,163
STA-00162,STA-,0162,162
STA-00161,STA-,0161,161
STA-00160,STA-,0160,160
STA-00159,STA-,0159,159
STA-00158,STA-,0158,158
STA-00157,STA-,0157,157
STA-00156,STA-,0156,156
STA-00155,STA-,0155,155
STA-00154,STA-,0154,154
STA-00153,STA-,0153,153
STA-00152,STA-,0152,152
STA-00151,STA-,0151,151
STA-00150,STA-,0150,150
STA-00149,STA-,0149,149
STA-00148,STA-,0148,148
STA-00147,STA-,0147,147
STA-00146,STA-,0146,146
STA-00145,STA-,0145,145
STA-00144,STA-,0144,144
STA-00143,STA-,0143,143
STA-00142,STA-,0142,142
STA-00141,STA-,0141,141
STA-00140,STA-,0140,140
STA-00139,STA-,0139,139
STA-00138,STA-,0138,138

screen capture

为什么MySQL会尝试添加我的字符​​串值?

3 个答案:

答案 0 :(得分:4)

如果要连接两个字符串,则应使用concat函数
例如:

SELECT CONCAT('WAS-','0020')

结果

WAS-0020

答案 1 :(得分:2)

请尝试使用CONCAT(SUBSTR(强制转换(标识符为char),1,4),SUBSTR(强制转换(标识符为char),6))。

现在有效吗?编辑:那工作!

答案 2 :(得分:1)

您必须使用CONCAT函数而不是+运算符。 见:Mysql Manual

在您的示例中,这将是:   CONCAT(SUBSTR(强制转换(标识符为char),1,4),SUBSTR(强制转换(标识符为char),6))' p + q'