返回财政年度的第一天(4月1日)T-SQL

时间:2018-06-21 06:13:32

标签: sql sql-server datetime getdate

财政年度的第一天是4月1日。

T-SQL查询将返回getdate()的4月1日

财政年度:4月1日至3月31日

3 个答案:

答案 0 :(得分:2)

尝试一下:

@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public SecurityConfiguration security() {
        return SecurityConfigurationBuilder.builder()
                .clientId("12345")
                .clientSecret("12345")
                .scopeSeparator(" ")
                .useBasicAuthenticationWithAccessCodeGrant(true)
                .build();
    }

    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xompare.moo.controllers"))
                .build()
                .securitySchemes(Arrays.asList(securityScheme()))
                .securityContexts(Arrays.asList(securityContext()))
                .apiInfo(metaData());

    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(Arrays.asList(new SecurityReference("spring_oauth", scopes())))
                .forPaths(PathSelectors.regex("/.*"))
                .build();
    }

    private AuthorizationScope[] scopes() {
        AuthorizationScope[] scopes = {
                new AuthorizationScope("read", "for read operations"),
                new AuthorizationScope("write", "for write operations") };
        return scopes;
    }

    public SecurityScheme securityScheme() {
        GrantType grantType = new ClientCredentialsGrant("http://localhost:8080/oauth/token");

        SecurityScheme oauth = new OAuthBuilder().name("spring_oauth")
                .grantTypes(Arrays.asList(grantType))
                .scopes(Arrays.asList(scopes()))
                .build();
        return oauth;
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

答案 1 :(得分:1)

declare @today  date = '2018-06-21'

select  fin_year = dateadd(month, 3, 
                           dateadd(year, 
                                   datepart(year, 
                                            dateadd(month, -3, @today)) - 1900, 0))

表达式datepart(year, dateadd(month, -3, @today))用于获取当前财政年度。由于您的会计年度为4月1日,因此从1月1日至3月31日减去3个月即可得出正确的年份(会计年度=会计年度)。

在那之后,只是将日期与该年的日期设置为4月1日

答案 2 :(得分:0)

DECLARE @DateToUse DATETIME = GETDATE(),
        @FinancialYearStart DATETIME
DECLARE @DayPart INT = DATEPART(DAY, @DateToUse),
        @MonthPart INT = DATEPART(MONTH, @DateToUse),
        @YearPart INT = DATEPART(YEAR, @DateToUse),
        @StartMonth INT = 4, -- April
        @StartDay INT = 1 -- 1st

SELECT DATETIMEFROMPARTS((
        @YearPart - CASE 
            WHEN @MonthPart > @StartMonth
                OR (
                    @MonthPart = @StartMonth
                    AND @DayPart >= @StartDay
                    )
                THEN 0
            ELSE 1
            END
        ), @StartMonth, @StartDay, 0, 0, 0, 0)

我刚刚解决了这个问题,它现在产生了 2020-04-01 00:00:00.000 。我扔了一些其他日期,它似乎工作得很好。显然,可以通过更改顶部的变量轻松更改月/日。

它不是最短的SQL块,但它很容易用于不同的日期。我在不同问题中看到的许多其他答案都返回了不同的格式,例如字符串或年份部分。而这个日期时间将允许它用于日期时间比较。