500分天价跪求一个SQL语句

来源:百度知道 编辑:UC知道 时间:2024/05/26 11:34:49
我有一个酒店订单表,里面有一个字段DateString是把多个房型的入住日期和离店日期用“|”组合成一

个字符串存储的
格式如下:
A房入住日期|A房离店日期|B房入住日期|B房离店日期|C房入住日期|C房离店日期
2008-08-11 |2008-08-14 |2008-08-10 |2008-08-11 |2008-08-19 |2008-08-23
0 1 2 3 4 5

现在客户要求在订单列表中根据入住日期查询所有订单,比如输入2008-08-11,则只要
DateString中0或2或4等于2008-08-11就满意条件,该条订单就被显示出来。

订单表为orders 日期串字段为:DateString

希望是如下的SQL语句:select * from orders where DateString like '2008-08-11'
格式的扩展。

请问这样的SQL语句如何写,我非常希望是用SQL语句,或者写个辅助函数也行,就是可能不能用存储过程
因为我是用分页存储过程显示数据的,不能再用其它存储过程了。

如果给了正确答案,保证追加到500分,甚至更多分,跪谢各位大侠。
回2楼的:
0 1 2 3 4 5
是分别对应上面2008-08-11 |2008-08-14 |2008-08-10 |2008-08-11 |2008-08-19 |2008-08-23
的序号.
上面的0 1 2 3 4 5是我为了让大家更明白我的用意,象数组一样列的序号,在数据库里并没有这个.
要求用SQLSERVER语言.
其实我也想用再加个表,但是这涉及很多方面,不容易啊,所以暂时先用着,以后再说吧.

***********注意:我这个日期串可不是固定长度的,用户可能选择两个房型,或者三个房型,也有可能更多*************

如果楼主的日期字符串每个日期都符合yyyy-mm-dd的格式,即年总是四位,月总是2位,日总是两位,且年月日之间总有一个字符的分隔符的话,
根据 puderty - 经理 五级 的回答,可以这样查询

/*入住日期为 2008-08-11 */
select *
from tmp_A
where (charindex('2008-08-11',datestring)-1)%2=0

/*离店日期为 2008-08-11 */
select *
from tmp_A
where (charindex('2008-08-11',datestring)-1)%2=1

-----------------------------------------------------------------------
--如果日期字符串不总是yyyy-mm-dd的格式,可以写一个自定义函数

/*建立测试数据*/
select * into tmp_A
from(
select 0 as FH, '2008-08-11|2008-08-13|2008-08-12|2008-08-22' as dateString
union all select 1 ,'2008-08-31|2008-08-13|2008-08-12|2008-08-22'
union all select 2 ,'2008-08-31|2008-08-13'
union all select 3 ,'2008-08-31|2008-08-13|2008-08-12|2008-08-22|2008-07-03|2008-08-01'
union all select 4 ,'2008-08-31|2008-08-13|2008-08-11|2008-08-22'
union all select 5 ,'2008-08-11|2008-08-22&