2011-05-05 156 views
0

当我尝试在此过程中将FLOATS转换为CHARS时,我在数据库中获得了空值。位置是一个地理空间领域。我究竟做错了什么?为什么我的CAST返回null/Nothing?

CREATE DEFINER=`me`@`%` PROCEDURE `UpdateLocationByObjectId`(IN objectId INT, 
              IN latitude FLOAT, 
              IN longitude FLOAT) 
BEGIN 
    UPDATE Positions P 
    JOIN Objects O ON P.Id = O.PositionId 
     SET P.Location = GeomFromText('Point(' + CAST(latitude AS CHAR(10)) + ' ' + CAST(longitude AS CHAR(10)) +')') 
     WHERE O.ObjectId = objectId; 
END 

如果我使用这个作为测试,它工作正常。

CREATE DEFINER=`me`@`%` PROCEDURE `UpdateLocationByObjectId`(IN objectId INT, 
              IN latitude FLOAT, 
              IN longitude FLOAT) 
BEGIN 
    UPDATE Positions P 
    JOIN Objects O ON P.Id = O.PositionId 
     SET P.Location = GeomFromText('Point(10 10')') 
     WHERE O.ObjectId = objectId; 
END 

回答

1

改变这一行

SET P.Location = GeomFromText('Point(' + CAST(latitude AS CHAR(10)) + ' ' 
             + CAST(longitude AS CHAR(10)) +')') 

SET P.Location = GeomFromText(concat('Point(' , CAST(latitude AS CHAR(10)) , ' ' 
               , CAST(longitude AS CHAR(10)) ,')')) 

+操作者将您的文本值( '10' + '10')= 20
所以中央部评估为'Point('+ 20 +')',将不能被读取的文本添加为​​数字+数字评估为NULL。

只有concat函数可以连接字符串。 实际上这个代码也可以正常工作:

SET P.Location = GeomFromText(concat('Point(', latitude, ' ', longitude,')')) 
+0

谢谢你刚刚算出来的! – 2011-05-05 21:07:44