mysql - MySQL:在一个语句中混合 SET @variable 和 SELECT
问题描述
看看 SO,我发现了 3 种不同的语法来设置变量,但只有第 3 种有效。你能解释一下为什么吗?
#doesn't work at all (error)
SET @N = 3; --3rd word
SET @delimiter = ' ';
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(`sentence`, @delimiter, @N), @delimiter, -1)
FROM
`test`;
https://www.db-fiddle.com/f/dJXZQT7nQvAcbbfon4HRXr/1
#working not as expected
SELECT @N := 3;
SELECT @delimiter := ' ';
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(`sentence`, @delimiter, @N), @delimiter, -1)
FROM
`test`;
https://www.db-fiddle.com/f/dJXZQT7nQvAcbbfon4HRXr/2
#working fine
SELECT 3 INTO @N;
SELECT ' ' INTO @delimiter;
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(`sentence`, @delimiter, @N), @delimiter, -1)
FROM
`test`;
解决方案
您不应该使用 db-fiddle.com 进行测试
在您的第一个示例中,错误出现在您的评论中。要成为有效的评论,--
后面必须跟一个空格。
当你修复它时,所有 3 个在官方 MySQL 命令行客户端上的工作方式完全相同!它仍然不在 db-fiddle.com 上,但就像我说的那样,这根本不重要。您选择哪一个是个人喜好问题,以及您是否想要在命令行上输出。SET
不输出,SELECT
有。
推荐阅读
- ionic-framework - 在 Ionic 中下载的文件位置在哪里
- django - 每个视图的 Django REST Framework page_size 未按预期工作
- angular - 如何在 Angular 7 中检查服务调用是否已完成?
- excel - Excel:单元格显示的值与其链接的值不同(迭代计算)
- html - 文本、图片和视频出现在我的弹性框后面
- flutter - 为什么我不能在颤振推送器中发送地图?
- r - 汇总/分组表中的唯一行
- bash - 如何将每个命令的 stout 重定向到 bash 中的单独日志文件?
- gtsummary - 在 gtsummary 中显示和比较连续变量的正态分布与非正态分布的简单方法
- azure - Power shell 命令禁用 Azure 数据工厂的网络设置