SQL中如何将变量拼接进查询?存储过程变量查询无返回值问题排查
问题原因及解决方案
- 首先排查低级语法错误:你提供的变量版查询语句结尾多了一个多余的单引号
',直接删除即可恢复正常,如果是粘贴笔误可忽略这条。 - 其次排查数据类型不匹配问题:你拼接生成的
@A、@B是字符串类型,若userdatetime字段为时间类型,部分数据库不会自动完成隐式类型转换,导致时间范围匹配失效。解决方案是主动把字符串变量转为时间类型,常见数据库写法如下:- MySQL:
BETWEEN STR_TO_DATE(@A, '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE(@B, '%Y-%m-%d %H:%i:%s') - SQL Server:
BETWEEN CAST(@A AS DATETIME) AND CAST(@B AS DATETIME) - Oracle:
BETWEEN TO_DATE(@A, 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE(@B, 'yyyy-mm-dd hh24:mi:ss')
- MySQL:
- 最后排查字符串拼接规则问题:部分数据库不支持用
+做字符串拼接,比如MySQL默认用CONCAT()函数,+会被识别为数值加法,哪怕打印结果看起来符合预期,变量实际存储的内容或类型也存在异常。如果是MySQL环境,可把变量赋值逻辑修改为:
set @A = CONCAT(SUBSTRING(@DataDate, 1, 4), '-', SUBSTRING(@DataDate,5, 2), '-', SUBSTRING(@DataDate, 7, 2), ' 15:00:00'); set @B = CONCAT(SUBSTRING(@DataDate, 1, 4), '-', SUBSTRING(@DataDate,5, 2), '-', SUBSTRING(@DataDate, 7, 2), ' 19:00:00');
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

