如何进行 T-SQL 查询,其中输出的第一个字母等于一个字符

Posted

技术标签:

【中文标题】如何进行 T-SQL 查询,其中输出的第一个字母等于一个字符【英文标题】:How to make a T-SQL query where the first letter of the output equals to a character 【发布时间】:2020-06-10 06:34:36 【问题描述】:

我想知道是否有办法进行查询,其中输出存储在局部变量中,如果输出与字符匹配,则使用 IF 条件检查第一个字符

查询大纲:-

DECLARE @result;
SET @result=SELECT @@version;
SELECT * FROM @result IF(SUBSTRING(@result, 1, 1)='M') WAITFOR DELAY '0:0:3'

【问题讨论】:

为什么您标记了 2 个完整的不受支持的 SQL Server 版本? 2005 多年来一直不受支持,而 2008 自去年年中以来一直不受支持。你真的应该早就在看升级路径了。 很多很多人仍然使用不受支持的 SQL Server 版本,因为他们无法控制,或者出于兼容性原因至少是兼容级别@Larnu。像你这样的评论很少有帮助,而且通常会让人觉得 SO 上存在敌对环境。 许多人仍在使用不受支持的版本,是的@iamdave,但许多人似乎也忘记了它们不受支持的事实。此外,OP 标记的不是 SQL Server 的 1 个版本,而是 2 个,这似乎很奇怪;两者都不支持。但是,我的评论绝不是敌对的,建议 OP 应该真正查看他们正在使用的 SQL Server 版本,看看他们可以做些什么来升级,或者提示他们使用了错误的标签。 2005 和 2008 都缺少很多我们认为在受支持版本中理所当然的功能。 好吧,至少有一个人(即:我)将其视为敌对的@Larnu,所以我认为还有其他人也这样做。 我可以向你保证,不是,@iamdave。 【参考方案1】:

你需要为局部变量声明一个type,也许是nvarchar(max)(因为@@version is defined as nvarchar)——因为它不是一个表变量,你不能选择from 它 - 但你可以选择 it:

DECLARE @result nvarchar(max);
SET @result = @@version;
SELECT @result;

或更新的 SQL Server 版本:

DECLARE @result nvarchar(max) = @@version;
SELECT @result;

至于 if 测试:

IF(SUBSTRING(@result, 1, 1)='M') WAITFOR DELAY '00:00:03';

然而,这 (WAITFOR DELAY) 似乎是一件很奇怪的事情......请注意,由于 TDS 的工作原理,您通常要到 之后才能看到查询的任何结果> 延迟已经过去。

【讨论】:

嗨,Marc,我需要 waitfor 延迟功能,你能给我确切的查询吗 @Rahul 我已经显示的代码的哪一部分不起作用?它在这里工作正常...... 谢谢马克,工作就像一个魅力

以上是关于如何进行 T-SQL 查询,其中输出的第一个字母等于一个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何强制我的 T-SQL 查询将不匹配的值输出为零?

用于从连接表中进行选择的 T-SQL 查询,其中有可变数量的参数?

如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?

如何解析从 T-SQL 查询返回的行

如何在这个特定的 T-SQL 查询中使用表变量?

如何在 C# T-SQL 查询字符串中使用 % 修饰符?