如果你不喜欢 IF/CASE 语句,像我一样:
with dt as
(select CAST('2013-11-28' as datetime) dt) --dt becomes your datetime column.
, ymdt as (select
DATEPART(year, dt) y,
DATEPART(month, dt) m,
DATEPART(day, dt) d,
dt
from dt) --split into year, month and date for readability
select y, m, d, dt,
DATEADD(month, 5 + d/28 - (m + d/28) % 6, --add months depending on month and day
DATEADD(day, 28 - d --go to the correct day
, dt) --start calculation from dt (the sql date functions' parameter order has always baffled me)
) HalfYearEndDate
from ymdt
SQL 引擎将所有这些合并到一个大的常量扫描或日期时间列上的标量表达式中。
如果您在其他报告中需要此功能,您应该为此创建一个 SQL 或 VB 函数,这样它就不会弄乱您的查询。
另外:除非绝对必要,否则不要在 T-SQL 中进行文本格式化!返回一个日期时间列并在报告本身中执行此操作。您需要在文本框上设置的格式是“dd MMM yyyy”(使用设计器时不带引号)。