正規表現を使用してこの比較を行おうとするのは賢明ではありません。次にコードを見たときに、あなたも他の人も理解できない非常に複雑な正規表現が得られます。
代わりに、文字列をコンポーネントに解析し、コンポーネントで作業を行います。これにより、より長いコードが生成されますが、より簡単に追跡できるコードになります。
最初と最後の日付に解析する必要がある「スパン」式があるもの。SQL Server での解決策を教えてください。私がこの方言を選んだのは、単に私にとってより簡単だからです。mysqlにすんなり適応できると思います(日付や文字列の関数はデータベースごとに名前が違うようです)。
次のクエリは、列 month1、year1、month2、および year2 をデータに追加します。
select t.*,
(case when charindex('/', part1) > 0 -- have month or not?
then cast(left(part1, charindex('/', part1)) as int)
else 1
end) as Month1,
(case when charindex('/', part1) > 0 -- have month or not?
then cast(substring(part1, charindex('/', part1), 100) as int)
else cast(part1 as int)
end) as Year1,
(case when charindex('/', part2) > 0 -- have month or not?
then cast(left(part2, charindex('/', part2)) as int)
else 1
end) as Month2,
(case when charindex('/', part2) > 0 -- have month or not?
then cast(substring(part2, charindex('/', part2), 100) as int)
else cast(part2 as int)
end) as Year2
from (select t.*,
left(t.span, charindex(t.span, '-')-2) as part1,
substring(t.span, charindex(t.span, '-')+2) as part2
from t
)
これらの式を使用して、必要な比較を行うことができます。1 つの注意点があります。年と年と月を混在させると、予期しない結果が生じる可能性があります。ユーザーが 9/2008 - 2010 のように何かを指定する場合は特に注意する必要があります。これは 2010 年のすべての月ですか? それとも最初の月だけ?