【发布时间】:2018-04-04 10:50:18
【问题描述】:
这样的表结构
select * from TimeTable;
userid | 1am|2am|3am| 4am| 5am
1002 | 1 |1 |1 | 1 | 1
1003 | 1 |1 |1 | 1 | 1
1004 | 1 |1 |1 | 1 | 1
1005 | 1 |1 |1 | 1 | 1
我想要选择具有特定时间列的列值为 1 的用户 我使用了以下查询,但它抛出错误
com.microsoft.sqlserver.jdbc.SQLServerException:转换失败 将 varchar 值 '[3PM]' 转换为数据类型 int 时。
select * from UserDetail u,TimeTable t
where u.userid=t.userid
and CONCAT(SUBSTRING(CONVERT(VARCHAR, getdate(), 100), 13, 2) ,'',RIGHT(CONVERT(VARCHAR, GETDATE(), 100),2)) = 1
像这样 当我使用硬编码的列名时,它工作正常 我想动态选择一个列名。
select * from UserDetail u,TimeTable t
where u.userid = t.userid
and [3AM] = 1
【问题讨论】:
-
今日提示:切换到现代显式
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
您确定您使用的是 MySQL 吗?这看起来像 SQL Server 语法。
-
那个 CONCAT 条件没有比较。
-
您不能将子查询的结果用作 SQL 中的列名 ..(您应该为此使用动态 sql)..
-
您可以为子查询的结果分配一个列名,但不能在同一个 select 语句的 where 子句中引用它,除非您在那里重复相同的子查询。我将源查询设计为 VIEW,这样我就可以引用子查询结果列,就像我在使用视图的查询中使用表列一样。目前您的帖子中根本没有子查询,所以请先澄清一下。
标签: sql-server