SQL 在两个值的最小值之间
SQL between min of two values
如果我必须在 SQL 服务器中编写此查询:
SELECT *
FROM Table1
WHERE data BETWEEN interval1 AND interval2
interval1
如果 fld1
>= '2014-1-1' 则为 fld1
否则为 '2014-1-1'
interval2
是 fld2
如果 fld2
是 <= '2014-12-31' 否则它是 '2014-12-31'
不使用变量怎么写?
我试试
Ksdt_TP022_Data BETWEEN
(SELECT CASE
WHEN sdt_TP019_InizioVal < '2014-1-1' THEN '2014-1-1'
ELSE sdt_TP019_InizioVal
END as b
from TP022_Quarto)
AND
(SELECT CASE
WHEN sdt_TP019_Fineval > '2014-12-31' THEN '2014-12-31'
WHEN sdt_TP019_Fineval IS NULL THEN '2014-12-31'
ELSE sdt_TP019_Fineval
END as a
from TP022_Quarto)
但是出现编译错误
几乎问了同样的问题here
简而言之,您可以使用 UDF(用户定义函数)或 CASE 语句。
试试这个
select * from Table1
WHERE data between
case when fld1 < '20140101' then '20140101' else fld1 end and
case when fld2 >'20141231 then '20141231' else fld2 end
SELECT *
FROM
Table1
WHERE
data BETWEEN interval1 AND coalesce(interval2, '2014-12-31')
and data between '2014-1-1' and '2014-12-31'
如果我必须在 SQL 服务器中编写此查询:
SELECT *
FROM Table1
WHERE data BETWEEN interval1 AND interval2
interval1
如果fld1
>= '2014-1-1' 则为fld1
否则为 '2014-1-1'interval2
是fld2
如果fld2
是 <= '2014-12-31' 否则它是 '2014-12-31'
不使用变量怎么写?
我试试
Ksdt_TP022_Data BETWEEN
(SELECT CASE
WHEN sdt_TP019_InizioVal < '2014-1-1' THEN '2014-1-1'
ELSE sdt_TP019_InizioVal
END as b
from TP022_Quarto)
AND
(SELECT CASE
WHEN sdt_TP019_Fineval > '2014-12-31' THEN '2014-12-31'
WHEN sdt_TP019_Fineval IS NULL THEN '2014-12-31'
ELSE sdt_TP019_Fineval
END as a
from TP022_Quarto)
但是出现编译错误
几乎问了同样的问题here
简而言之,您可以使用 UDF(用户定义函数)或 CASE 语句。
试试这个
select * from Table1
WHERE data between
case when fld1 < '20140101' then '20140101' else fld1 end and
case when fld2 >'20141231 then '20141231' else fld2 end
SELECT *
FROM
Table1
WHERE
data BETWEEN interval1 AND coalesce(interval2, '2014-12-31')
and data between '2014-1-1' and '2014-12-31'