【发布时间】:2011-12-07 19:31:22
【问题描述】:
我有一个名为@months 的列,它以这种格式存储月份
@month = '01-03-05-11-12'
我想要一个 SELECT 查询,将此列分为 12 个,分别为一月、二月、三月
我的每条记录前面都有这一列。因此,如果记录中包含 @month = '01-03',它会显示在一月和三月的下方。可以做这样的事情吗?或者任何接近的东西就足够了。
我玩过 case 语句,但无法产生结果。
如果有人想尝试,请编写代码
create table recs(
id int not null primary key,
cust_name varchar(20),
callmonth varchar(36)
)
insert into recs values(1,'john','01-12')
insert into recs values(2,'Jessica','02-06')
insert into recs values(3,'Charlie','01-06')
insert into recs values(4,'steale','03-04')
insert into recs values(5,'Silica','01-02-03-04-05-06-07-08-09-10-11-12')
insert into recs values(6,'Luder','01-03-05-07-09-11-12')
insert into recs values(7,'Panther','01-06-12')
insert into recs values(8,'Dinky','03-04-15')
【问题讨论】:
-
为什么要在 RDBMS 中存储分隔字符串?
-
Bad bad bad design... 修复你的表格结构,而不是在黑暗中四处乱窜,试图弥补这个错误的设计决定。
-
你的意思是,我每个月应该有 12 个不同的列?
-
我再解释一下:我有 20k 条记录,每条记录都有一个预定的月份,每年都会被调用。还有另一个表保存通话记录。到目前为止,逻辑对我来说可以追溯当前和过去一年中每个月的记录吗?我在做什么错并修复它。并且此查询仅供我自己用于测试目的,不会在实际代码中实现。
标签: sql sql-server-2005 select case