sql case when实现日期校验的代码(图文)

发布时间:2020-09-16编辑:脚本学堂
由于表中的字段未设置约束,造成了数据存储的很不规范,但提取数据时又有如下的要求:1)、a、b、c为TX表中的字段,数据类型均为DateTime,且无空值(NULL)。

由于表中的字段未设置约束,造成了数据存储的很不规范,但提取数据时又有如下的要求(日期校验):
1)、a、b、c为TX表中的字段,数据类型均为DateTime,且无空值(NULL)。
2)、a不能小于2003-01-01,b不能小于2006-01-01且不能小于a,c不能小于b。
要求:必须用SQL实现,不允许将数据提取到数据集(如DataGrid)进行操作,折磨人啊。

复制代码 代码如下:

日期检验
--b2
set @a='2005-01-01'set @b='2003-01-01'
--set @a='2009-01-01'set @b='2007-01-01'
--set @a='2006-01-01'set @b='2005-01-01'
select (case when (case when @b<'2006-01-01' then '2006-01-01' else @b end)<@a then @a else @b end)b
select (case when (case when @b<@a then @a else @b end)<'2006-01-01' then '2006-01-01' else @b end)b

--b3
select (case when (case when @b<'2006-01-01' then '2006-01-01' else @b end)<@a then @a else (case when @b<'2006-01-01' then '2006-01-01' else @b end) end)b
select (case when (case when @b<@a then @a else @b end)<'2006-01-01' then '2006-01-01' else (case when @b<@a then @a else @b end) end)b

--c(c>=b)
set @a='2002-01-01'set @b='2000-01-01'set @c='2001-01-01'
set @a='2007-01-01'set @b='2008-01-01'set @c='2004-01-01'

--select (case when @c<@b then @b else @c end)c
--把b3代入上面表达式中(替换@b)
select (case when
@c<(case when (case when @b<'2006-01-01' then '2006-01-01' else @b end)<@a then @a else (case when @b<'2006-01-01' then '2006-01-01' else @b end) end)
then
(case when (case when @b<'2006-01-01' then '2006-01-01' else @b end)<@a then @a else (case when @b<'2006-01-01' then '2006-01-01' else @b end) end)
else @c end)c

您可能感兴趣的文章:
SQL Server中Case语句的不同用法
SQL基础语句(数据库函数,时间函数,Union,Case,索引等)
sql server中的select case when
sql server中case when then else用法