SQL SELECT、CASE、BETWEEN INTO 语句

Posted

技术标签:

【中文标题】SQL SELECT、CASE、BETWEEN INTO 语句【英文标题】:SQL SELECT, CASE, BETWEEN INTO statements 【发布时间】:2016-01-11 16:29:24 【问题描述】:

我有一个 SQL 查询,它比较 2 个表以检查登录时间和计划是否关闭,以使用 int 值填充第三个表。我得到了它的工作,但我正在尝试向 select 命令添加其他变体。

这是有效的代码:

DECLARE @sqlSelect varchar(max)
SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 else 1 end as LoginInc into Integers FROM loginlogout JOIN Schedules$ on loginlogout.[Agent Name] = Schedules$.AgentName'

EXEC(@sqlSelect)
GO

我想补充的是:

DECLARE @six varchar(max)
DECLARE @sixo varchar(max)
DECLARE @sixnerdy varchar(max) 
DECLARE @sqlSelect varchar(max)
SET @six = '[6:00AM]'
SET @sixo = '[6:05AM]'
SET @sixnerdy = '[6:30AM]' 
SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 when [Login Time] BETWEEN '+ @sixo +' and '+ @sixnerdy +' then 1 else 1 end as LoginInc into Integers FROM loginlogout JOIN Schedules$ on loginlogout.[Agent Name] = Schedules$.AgentName'

EXEC(@sqlSelect)
GO 

运行此查询时,我收到错误消息 207 无效列名。因此我尝试了:

SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 when [Login Time] BETWEEN '+ @sixo +' and '+ @sixnerdy +' then 1 else 1 end as LoginInc into Integers'

删除 FROM 语句。这表示命令运行,但从未创建整数表。这可以在 1 个 SQL 命令中完成吗?此外,我还需要添加大约 4 个 BETWEEN 查询来附加到此命令。

【问题讨论】:

6:00AM 是一个奇怪的字段名称。这真的是该领域的名称吗? @ConradFrix, 6:00AM 不用作字段名,它用于between @HoneyBadger 在早上 6:00 左右注意到 []。由于它连接到 sql 字符串,我希望它被视为字段名称而不是值 这里不需要产生动态 SQL 的开销和风险,您可以将日期作为普通 SELECT 命令的参数。 如果你直接在 SSMS 中运行,你会收到想要的结果吗? 【参考方案1】:

乍一看会怀疑没有问题,因为时间没有用单引号括起来。这样的事情有用吗?

DECLARE @six varchar(max)
DECLARE @sixo varchar(max)
DECLARE @sixnerdy varchar(max) 
DECLARE @sqlSelect varchar(max)
SET @six = '''6:00AM'''
SET @sixo = '''6:05AM'''
SET @sixnerdy = '''6:30AM''' 
SET @sqlSelect = 'SELECT loginlogout.[Agent Name], case when loginlogout.[Login Time] = Schedules$.StartTime then 0 when [Login Time] BETWEEN '+ @sixo +' and '+ @sixnerdy +' then 1 else 1 end as LoginInc into Integers FROM loginlogout JOIN Schedules$ on loginlogout.[Agent Name] = Schedules$.AgentName'

EXEC(@sqlSelect)
GO 

虽然这一切看起来仍然有些笨拙。 EXEC SQL 字符串与按原样执行 SELECT 语句是否有理由?

【讨论】:

以上是关于SQL SELECT、CASE、BETWEEN INTO 语句的主要内容,如果未能解决你的问题,请参考以下文章

在“WHERE”中的“CASE”语句中的“THEN”之后使用“Between”运算符

如何在postgresql中使用CASE和Between in where条件一年

如何使这个语句更快:“paramDate between startDate and NULL”?

SQL between and 日期范围 筛选数据不符

BETWEEN 具有相等限制的 SQL 查询

sql between 日期 字符串