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条件一年