gpt4 book ai didi

sql - T-SQL 中的悬空 "else"分辨率

转载 作者:行者123 更新时间:2023-12-02 00:28:42 25 4
gpt4 key购买 nike

所以我的任务是将一些 T-SQL 代码转换为 C 代码。编写我正在转换的代码的人很少甚至没有沉迷于代码礼仪。我之所以知道这一点,是因为完全没有评论、没有缩进,也没有开始/结束 block ,除非在语法上绝对必要(以及一些为了好的措施而任意抛出的部分)。

这引发了一些问题。我正在转换的代码基于 Metaphone 算法。我说“基于”是因为它有很多......“未记录的改进”使其与官方实现不同。因此,我不能只是去获取一些 Metaphone 实现,因为那样它实际上就不是“正确”的翻译。

所以这是问题的根源:

if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @Result=@Result + 'j'
else
set @Result=@Result + 't'

根据 Metaphone 的工作原理,我很确定它们的意思是:

if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @Result=@Result + 'j'
else
set @Result=@Result + 't'

但我不确定它是否真的被解释为:

if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @Result=@Result + 'j'
else
set @Result=@Result + 't'

这个小片段没什么大不了的,但就在它之后,有一个部分包含五个“if”语句和一个“else”语句,并且没有开始/结束 block 来明确安排它们。如果我可以实际运行代码来测试和查看,这一切都不是什么大问题,但遗憾的是,我没有测试它的环境,也没有以前使用代码的任何输出。

tl;dr: 你们中的任何一个 T-SQL 专家都知道上面两个语句中的哪一个将被解释为以及它们在 T 中的 shift/reduce 冲突的规则是什么-SQL? (附加到第一个“if”语句,附加到最后一个“if”语句,随机选择一个?)

编辑:这是另一个有趣的几行。

if @str1='t'
if substring(@str,@cnt,3) in ('tia','tio')
set @Result=@Result + 'x'
else
if @str2='th'
set @Result=@Result + '0'
else
if substring(@str,@cnt,3) <> 'tch'
set @Result=@Result + 't'

EDIT2: 好吧,如果我没看错这些答案,那就意味着上面的内容实际上是

if @str1='t'
if substring(@str,@cnt,3) in ('tia','tio')
set @Result=@Result + 'x'
else
if @str2='th'
set @Result=@Result + '0'
else
if substring(@str,@cnt,3) <> 'tch'
set @Result=@Result + 't'

最佳答案

这里有一些东西应该可以帮助你

DECLARE @testvar INT;
DECLARE @testvar2 INT;
SET @testvar = 1;
SET @testvar2 = 1;

IF @testvar = 1
IF @testvar2 = 1
SELECT 'Got to 1';
ELSE
SELECT 'Got to 2';

如果 testvartestvar2 都是 1,它输出“Got to 1”。

如果 testvar=1testvar2=2,它输出“Got to 2”。

如果testvar=2,则没有输出。所以 else 与最近的 if

配对

关于sql - T-SQL 中的悬空 "else"分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com