我无法一致地设置和查询变量@imgpath
从它获得价值后,我发现它不一致
在left(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1) in("C")
SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1)
的已解析数据
看起来像这样:
C5
C178
在我的脚本中,我查询@image路径,如
If(substring(@imgpath,1,1) = "C",dosmthing,dosomthing)
很多时候这将返回" 0"
我认为这是我设置@imgpath
的方式或地点如果我没有使用THEN将其分配给变量,它可以正常工作(正确)
select pa.name,
case
when left(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1) in("B") then @imgpath :=
if(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1) < "B16",3464,101)
when left(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1) in("C") then @imgpath :=
if(length(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1)) < 3,
concat(left(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1), "0",
right(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1)),SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1))
when left(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1) = "J" then @imgpath :=
if(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1) < "J19",3464,101)
when left(SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1),1) = "O" then @imgpath := 101
when SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1) < 116 then @imgpath := 3464
when SUBSTRING_INDEX(SUBSTRING_INDEX(pa.name, ' ', 2), ' ', -1) >= 116 then @imgpath := 101
end as "temp",
答案 0 :(得分:0)
你无法做你想做的事。 MySQL documentation 显式表明:
在下面的语句中,您可能会认为MySQL会进行评估 首先是@a,然后是第二个任务:
mysql> SET @a='test'; mysql> SELECT @a,(@a:=20) FROM tbl_name;
但是,涉及用户变量的表达式的评估顺序是未定义的。
换句话说,您不能指望在不同的表达式中使用该变量。