首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >获取日期限制

获取日期限制
EN

Database Administration用户
提问于 2014-06-10 07:42:53
回答 2查看 869关注 0票数 0

所以我需要的是对资金来源合同的用户的限制。这就是我想要实现的。我正试图让用户在2014年内输入日期,这将提高每个月有多少资金支持的合同。我只想要到上个月的最后一天和2014年内过去的几个月。例如,我们是在6月份,如果用户输入6月之前的任何日期,他可以看到有多少个月的资金到位的合同--而不是从6月起的任何合同。

因此,用户不应该能够看到七月,直到我们到了八月,我们可以从那里看到七月。这是我的问题。

我觉得GetDate的where子句是不正确的。如有任何帮助,将不胜感激。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          Alter Proc spGetAdminTotalYTD

           (@Begin_Date  DATETIME, 
            @End_Date DATETIME,
            @program int=null) As

    Begin
Declare @year int
Set @year = 2014

        SELECT  d.name, a.dealer_code, b.last_name, b.city, b.state, b.phone
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 1 THEN 1 ELSE NULL END) January
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 2 THEN 1 ELSE NULL END) Feburary
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 3 THEN 1 ELSE NULL END) March
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 4 THEN 1 ELSE NULL END) April
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 5 THEN 1 ELSE NULL END) May
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 6 THEN 1 ELSE NULL END) June
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 7 THEN 1 ELSE NULL END) July
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 8 THEN 1 ELSE NULL END) August
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 9 THEN 1 ELSE NULL END) September
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 10 THEN 1 ELSE NULL END) October
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 11 THEN 1 ELSE NULL END) November
            , COUNT(CASE WHEN  MONTH(c.Funded_date) = 12 THEN 1 ELSE NULL END) December,
            COUNT(1) AS YTD
        FROM tdealer a JOIN tContact b ON a.contact_id = b.contact_id 
             JOIN tContract  c ON a.dealer_id = c.dealer_id JOIN tCompany d 
             ON  c.company_id = d.company_id

       WHERE YEAR(c.Funded_date) = @Year
             AND c.Funded_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0,GETDATE())-4,0)
             AND c.Funded_date <  DATEADD(MONTH, DATEDIFF(MONTH,-1,GETDATE())-4,0)
             AND c.program_id = @program
             AND c.funded_date Between @Begin_Date And @End_Date

            GROUP BY
    d.name,
    a.dealer_code,
    b.last_name,
    b.city,
    b.state,
    b.phone
    END
EN

回答 2

Database Administration用户

发布于 2014-06-10 09:56:52

试一试这个过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE PROCEDURE dbo.spGetAdminTotalYTD_AB -- always use schema prefix!
  @Begin_Date  DATETIME, 
  @End_Date    DATETIME,
  @program_id  INT = NULL -- use a name consistent with the column
AS
BEGIN
  SET NOCOUNT ON; -- always use SET NOCOUNT ON and semi-colons

  DECLARE @year INT = 2014; -- why should this be hard-coded? 
                     -- So you can refactor the code in January? 
                     -- And again the following January?

  -- let's get the beginning of this year instead:
  DECLARE @thisyear DATETIME = DATEADD(DAY, 
    1-DATEPART(DAYOFYEAR, GETDATE()), DATEDIFF(DAY,0,GETDATE()));

  -- if @Begin_Date pre-dates that, make it Jan 1:
  DECLARE @startrange DATETIME = CASE
    WHEN @Begin_Date < @thisyear THEN @thisyear ELSE @Begin_Date END;

  -- make sure the end of the range is actually at the
  -- end of the month *before* the end date they actually
  -- specify. Assumes they're basing this on GETDATE().
  -- If they pass the last day of the month, you may need
  -- to add logic to make that a valid selection.
  DECLARE @endrange DATETIME = DATEADD
  ( 
    DAY, 
    1-DATEPART(DAY, DATEADD(DAY, DATEDIFF(DAY,0,@End_Date),0)), 
    DATEADD(DAY, DATEDIFF(DAY,0,@End_Date), 0)
  );

  ;WITH x AS
  (
    SELECT company_id, dealer_id, 
      [Jan],[Feb],[Mar],[Apr],[May],[Jun],
      [Jul],[Aug],[Sep],[Oct],[Nov],[Dec],

      -- to group YTD by company_id + dealer_id:
      YTD = [Jan]+[Feb]+[Mar]+[Apr]+[May]+[Jun]
           +[Jul]+[Aug]+[Sep]+[Oct]+[Nov]+[Dec]

      -- to group YTD by only company_id:
      YTD2 = SUM([Jan]+[Feb]+[Mar]+[Apr]+[May]+[Jun]
           +[Jul]+[Aug]+[Sep]+[Oct]+[Nov]+[Dec]) 
           OVER (PARTITION BY Company_id)
    FROM
    (
      SELECT company_id, dealer_id,
        [Jan] = COALESCE([Jan],0), [Feb] = COALESCE([Feb],0), [Mar] = COALESCE([Mar],0),
        [Apr] = COALESCE([Apr],0), [May] = COALESCE([May],0), [Jun] = COALESCE([Jun],0),
        [Jul] = COALESCE([Jul],0), [Aug] = COALESCE([Aug],0), [Sep] = COALESCE([Sep],0),
        [Oct] = COALESCE([Oct],0), [Nov] = COALESCE([Nov],0), [Dec] = COALESCE([Dec],0)
      FROM
      (
        SELECT m = LEFT(DATENAME(MONTH,DATEADD(MONTH,
                   DATEDIFF(MONTH,0,Funded_date), 0)),3),
          company_id, 
          dealer_id, 
          mc = COUNT(*)
        FROM dbo.tContract
        WHERE program_id = @program_id
          AND Funded_date >= @startrange
          AND Funded_date < @endrange -- don't use BETWEEN for range queries
        GROUP BY LEFT(DATENAME(MONTH,DATEADD(MONTH,
            DATEDIFF(MONTH,0,Funded_date), 0)),3),
          company_id, 
          dealer_id
      )
      AS x
      PIVOT 
      (
        MAX(mc) FOR m IN 
        (
          [Jan],[Feb],[Mar],[Apr],[May],[Jun],
          [Jul],[Aug],[Sep],[Oct],[Nov],[Dec]
        )
      ) AS p
    ) AS y
  ) 
  SELECT 
    comp.name, deal.dealer_code, -- don't use meaningless aliases like a,b,c,d
    cont.last_name, cont.city, cont.[state], cont.phone, 
    x.[Jan],x.[Feb],x.[Mar],x.[Apr],x.[May],x.[Jun],
    x.[Jul],x.[Aug],x.[Sep],x.[Oct],x.[Nov],x.[Dec],
    x.YTD, x.YTD2
  FROM x
  INNER JOIN dbo.tDealer AS deal
  ON x.dealer_id = deal.dealer_id
  INNER JOIN dbo.tCompany AS comp
  ON x.company_id = comp.company_id
  INNER JOIN dbo.tContact AS cont
  ON deal.contact_id = cont.contact_id;
END
GO

许多评论都有很多背景知识,不仅仅是我在抱怨你应该如何像我这样写代码:

票数 2
EN

Database Administration用户

发布于 2014-06-10 12:06:27

如果您已经指定了年份,则可以通过删除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AND c.Funded_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-4, 0)

如果您只是想获得一个月的第一天,这可能是一个简单的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DATEADD(day,-(DAY( getdate())-1) ,Convert(date,getdate()))

因此,新的WHERE子句看起来如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WHERE YEAR(c.Funded_date) = @Year 
AND c.Funded_date < DATEADD(day,-(DAY( getdate())-1) ,Convert(date,getdate()))
and c.program_id = @program 
And c.funded_date Between @Begin_Date And @End_Date
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/67979

复制
相关文章
日期时间限制的选择
对于elementUI一些拿来即用的组件,虽然是可以直接用,但仍需要针对自己的业务做一些特殊处理
itclanCoder
2021/11/18
3K0
jquery获取日期,对比日期大小
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106361.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/30
4.7K0
python获取日期加减之后的日期
python语言中的datetime模块可以利用其中的方法获取不同的日期,比如获取当前日期、明天、昨天、上个月、下个月和明年。下面利用几个实例说明这些日期的获取方法,操作如下:
周小董
2019/03/25
10.9K0
python获取日期加减之后的日期
java获取当前日期是周几_根据日期获取当前周
/** * 获取当前日期是星期几<br> * * @param dt * @return 当前日期是星期几 */ public static String getWeekOfDate(Date dt) { String[] weekDays = {“星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”}; Calendar cal = Calendar.getInstance(); cal.setTime(dt);
全栈程序员站长
2022/10/29
5.4K0
爬虫 | 时间日期获取
在爬虫中,我们在爬取某些网页时,需要的数据中有时间日期,静态的网页直接就可以爬取,但碰到动态加载的对应的时间可能就是 js 代码生成的,直接爬取得不到。小编给大家带来了两个例子来爬取对应的时间日期。
用户6825444
2020/03/04
5.3K0
python获取昨日日期
转载于:https://www.cnblogs.com/phpk/p/10928999.html
全栈程序员站长
2021/07/12
1.8K0
php获取农历日期节日
$c = new DayService(); $today=$c->convertSolarToLunar(date('Y'),date('m'),date('d')); $time ="农
IT工作者
2022/03/01
8K0
获取日期的String格式
张紫娃
2023/07/22
2850
获取日期的String格式
Java获取两个日期之间的日期
/** * 获取两个日期之间的日期 * @param start 开始日期 * @param end 结束日期 * @return 日期集合 */ private List<Date> getBetweenDates(Date start, Date end) { List<Date> result = new ArrayList<Date>(); Calendar tempStart = Calendar.g
水煮麥楽雞
2022/11/20
6.2K0
Python获取当前日期和日期差计算
关于python的日期和时间,用法很多,此处只记录自己比较常用的部分,后面有时间再学习一下时间戳。
py3study
2020/01/19
10.9K0
python 获取n天前的日期和日期列表
import datetime def get_nday_list(n): import datetime before_n_days = [] for i in range(1, n + 1)[::-1]: before_n_days.append(str(datetime.date.today() - datetime.timedelta(days=i))) return before_n_days
用户5760343
2022/05/13
3.2K0
小程序云函数获取日期
最近在开发一个大用户量的小程序,由于某个环节校验需要将日期进行格式存储,但由于苹果手机和安卓手机返回的日期不同导致格式存在一些小问题,本来以为写个函数搞掂;但发现不同的苹果品牌IOS返回的日期格式;在调试器里测试可以,但真机就老出问题,网上看了一下资料很多人也遇到但都没有确信可以解决的方案,于是自己写了一个云函数进行日期的获取,但又引出一个新的问题就是云函数的时区问题,当然这个已经有解决方法,这里就不再讨论。。
谭广健
2021/07/02
2.4K0
SQL 获取最长的日期序列
有一张学习打卡表 his_sign 表,简单起见,只设置了两个字段(id,create_ts),一个是主键,另一个是打卡时间。his_sign 表的数据如下,我们要统计出这张表里面最长的连续打卡记录。
白日梦想家
2020/07/20
2.5K0
DateTimePicker 日期时间选择器,默认获取当前日期
在vue里面,我们已经用到过单独的TimePicker 时间选择器和DatePicker 日期选择器了,现在需要用到一个可以同时选择年月日时分秒的插件,饿了么的文档里面就有现成可以使用的~~
王小婷
2021/07/19
7.3K0
DateTimePicker 日期时间选择器,默认获取当前日期
js获取当前日期与时间_js获取只有年月日的日期
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
12.5K0
TypeScript 2 : 获取当前日期及前后范围日期【Array】
就是用时间戳进行换算,然后通过内置函数获取对应字段进行拼接,,这里没有带时分秒,有兴趣的可以加个可选参数把时分秒带上。。因为我这里不需要用到,所以我就没加进去了。。
CRPER
2018/08/28
3.6K0
如何用Python获取两个日期之间的日期?
问:如何用Python获取两个日期之间的日期? def date_range(start, end): delta = end - start # as timedelta days = [start + timedelta(days=i) for i in range(delta.days + 1)] return days start_date = datetime(2020, 12, 1) end_date = datetime(2020, 12, 5) print(d
TalkPython
2020/12/11
5.8K0
为Qt程序获取编译日期时间
利用__DATE__与__TIME__编译宏特性为Qt程序添加编译日期时间。 static const QDateTime buildDateTime() { QString dateTime; dateTime += __DATE__; dateTime += __TIME__; return QLocale(QLocale::English).toDateTime(dateTime, "MMM dd yyyyhh:mm:ss"); } 另外,下列代码并不能获取编译日期时
Qt君
2019/08/05
2.7K0
PHP如何获取本周所有的日期
在日常的开发中,尤其是数据汇总的业务场景,我们一般会有这样的场景,统计本周内的订单数据。首先我们要得到本周内有哪些日期,在根据日期去做查询操作。这里分享一篇如何使用PHP获取本周的所有日期。
兔云小新LM
2023/05/11
2.6K0
PHP如何获取本周所有的日期
PHP获取本周所有日期或者最近七天所有日期
本篇文章主要为大家介绍下php如何获取本周的所有日期,或者最近七天的所有日期。希望可以帮助到有需要的朋友
码农编程进阶笔记
2021/07/20
1.8K0

相似问题

Server 2005 -限制日期时间字段为日期的最佳方法

10

试图根据日期限制存储过程结果

20

限制用户只获取聚合信息

10

Server获取日期范围

10

获取文档创建日期

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文