我在我的数据库,它表示在这样的工作日字符串:查找字符串的任何部分在另一个字符串处理SQL
1234567 (all days of the week)
1230567 (all days but Thursday, EU standard - day 1 is Monday)
0000067 (no day apart from Saturday and Sunday)
,我需要写一个SQL疑问,检查重叠。 例如:
1234500 and 0000067 are NOT overlapping.
while 1234500 and 0030000 are overlapping (the 3).
and 1234500 and 0000567 IS overlapping (the 5).
每个条目都有一个ID,客户号码,并且该平日表示。
我的想法是这样的:
SELECT
*
FROM dbo.Customers c
JOIN dbo.Customers c2 ON c.CustomerNumber = c2.CustomerNumber
AND c.Days <> c2.Days
WHERE 1 = 1
AND ...?
要获得两个条目是相同的客户,但是当我来到WHERE语句我打了一个空白。在两个Days字段中查找子字符串(例如3)是非常容易的,但是当7个条目中的任何一个可以重叠并且我必须排除0(不活跃的一天)时,我会感到困惑。
我需要一些帮助。
也可能有多个重叠,我只需要确定它是否重叠,我其实不需要知道多少天或哪几天。 –
*叹息*按下输入太快:1234560和0234567理论上可能存在于数据库中。 –
跳跃想法的不好主意:(1)将所有非零字符更改为1,将二进制数字字符串转换为整数,然后['&'](https://docs.microsoft.com/en -us/sql/t-sql/language-elements/bitwise-and-transact-sql)(按位与)整数来检测重叠。 (2)将字符串从数字推到XML和...。 (如果持续计算的列与星期的位图的整数值一起保存,那么二进制方法可能不会那么糟糕。) – HABO