精华内容
下载资源
问答
  • mysql查询一,查询一周,查询一个月的数据 查询一: select * from table where to_days(column_time) = to_days(now()); select * from table where date(column_time) = curdate(); 查询一周: ...
    
    

    查询一天:

    select * from table where to_days(column_time) = to_days(now());
    select * from table where date(column_time) = curdate();

    查询一周:

    select * from table   where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);

    查询一个月:

    select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);

    mysql的日期和时间函数  
    查询选择所有 date_col 值在最后 30 天内的记录。   
    mysql> SELECT something FROM tbl_name 
                WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;    //真方便,以前都是自己写的,竟然不知道有这,失败.

    DAYOFWEEK(date)   
    返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的标准。   
    mysql> SELECT DAYOFWEEK(’1998-02-03’); 
             -> 3 

    WEEKDAY(date)   
    返回 date 的星期索引(0 = Monday, 1 = Tuesday, ... 6 = Sunday):   
    mysql> SELECT WEEKDAY(’1998-02-03 22:23:00’); 
             -> 1 
    mysql> SELECT WEEKDAY(’1997-11-05’); 
             -> 2 

    DAYOFMONTH(date)   
    返回 date 是一月中的第几天,范围为 1 到 31:   
    mysql> SELECT DAYOFMONTH(’1998-02-03’); 
             -> 3 

    DAYOFYEAR(date)   
    返回 date 是一年中的第几天,范围为 1 到 366:   
    mysql> SELECT DAYOFYEAR(’1998-02-03’); 
             -> 34 

    MONTH(date)   
    返回 date 中的月份,范围为 1 到 12:   
    mysql> SELECT MONTH(’1998-02-03’); 
             -> 2 

    DAYNAME(date)   
    返回 date 的星期名:   
    mysql> SELECT DAYNAME("1998-02-05"); 
             -> ’Thursday’ 

    MONTHNAME(date)   
    返回 date 的月份名:   
    mysql> SELECT MONTHNAME("1998-02-05"); 
             -> ’February’ 

    QUARTER(date)   
    返回 date 在一年中的季度,范围为 1 到 4:   
    mysql> SELECT QUARTER(’98-04-01’); 
             -> 2 

    WEEK(date)   
    WEEK(date,first)   
    对 于星期日是一周中的第一天的场合,如果函数只有一个参数调用,返回 date 为一年的第几周,返回值范围为 0 到 53 (是的,可能有第 53 周的开始)。两个参数形式的 WEEK() 允许你指定一周是否以星期日或星期一开始,以及返回值为 0-53 还是 1-52。 这里的一个表显示第二个参数是如何工作的: 

    值     含义 
    0     一周以星期日开始,返回值范围为 0-53 
    1      一周以星期一开始,返回值范围为 0-53 
    2      一周以星期日开始,返回值范围为 1-53 
    3      一周以星期一开始,返回值范围为 1-53 (ISO 8601) 


    mysql> SELECT WEEK(’1998-02-20’); 
             -> 7 
    mysql> SELECT WEEK(’1998-02-20’,0); 
             -> 7 
    mysql> SELECT WEEK(’1998-02-20’,1); 
             -> 8 
    mysql> SELECT WEEK(’1998-12-31’,1); 
             -> 53 

    注意,在版本 4.0 中,WEEK(#,0) 被更改为匹配 USA 历法。 注意,如果一周是上一年的最后一周,当你没有使用 2 或 3 做为可选参数时,MySQL 将返回 0: 
    mysql> SELECT YEAR(’2000-01-01’), WEEK(’2000-01-01’,0); 
             -> 2000, 0 
    mysql> SELECT WEEK(’2000-01-01’,2); 
             -> 52 

    你 可能会争辩说,当给定的日期值实际上是 1999 年的第 52 周的一部分时,MySQL 对 WEEK() 函数应该返回 52。我们决定返回 0 ,是因为我们希望该函数返回“在指定年份中是第几周”。当与其它的提取日期值中的月日值的函数结合使用时,这使得 WEEK() 函数的用法可靠。 如果你更希望能得到恰当的年-周值,那么你应该使用参数 2 或 3 做为可选参数,或者使用函数 YEARWEEK() : 
    mysql> SELECT YEARWEEK(’2000-01-01’); 
             -> 199952 
    mysql> SELECT MID(YEARWEEK(’2000-01-01’),5,2); 
             -> 52 

    YEAR(date) 
    返回 date 的年份,范围为 1000 到 9999: 
    mysql> SELECT YEAR(’98-02-03’); 
             -> 1998 

    YEARWEEK(date) 
    YEARWEEK(date,first) 
    返回一个日期值是的哪一年的哪一周。第二个参数的形式与作用完全与 WEEK() 的第二个参数一致。注意,对于给定的日期参数是一年的第一周或最后一周的,返回的年份值可能与日期参数给出的年份不一致: 
    mysql> SELECT YEARWEEK(’1987-01-01’); 
             -> 198653 

    注意,对于可选参数 0 或 1,周值的返回值不同于 WEEK() 函数所返回值(0), WEEK() 根据给定的年语境返回周值。 
    HOUR(time) 
    返回 time 的小时值,范围为 0 到 23: 
    mysql> SELECT HOUR(’10:05:03’); 
             -> 10 

    MINUTE(time) 
    返回 time 的分钟值,范围为 0 到 59: 
    mysql> SELECT MINUTE(’98-02-03 10:05:03’); 
             -> 5 

    SECOND(time) 
    返回 time 的秒值,范围为 0 到 59: 
    mysql> SELECT SECOND(’10:05:03’); 
             -> 3 

    PERIOD_ADD(P,N) 
    增加 N 个月到时期 P(格式为 YYMM 或 YYYYMM)中。以 YYYYMM 格式返回值。 注意,期间参数 P 不是 一个日期值: 
    mysql> SELECT PERIOD_ADD(9801,2); 
             -> 199803 

    PERIOD_DIFF(P1,P2) 
    返回时期 P1 和 P2 之间的月数。P1 和 P2 应该以 YYMM 或 YYYYMM 指定。 注意,时期参数 P1 和 P2 不是 日期值: 
    mysql> SELECT PERIOD_DIFF(9802,199703); 
             -> 11 

    DATE_ADD(date,INTERVAL expr type) 
    DATE_SUB(date,INTERVAL expr type) 
    ADDDATE(date,INTERVAL expr type) 
    SUBDATE(date,INTERVAL expr type) 
    这 些函数执行日期的算术运算。ADDDATE() 和 SUBDATE() 分别是 DATE_ADD() 和 DATE_SUB() 的同义词。 在 MySQL 3.23 中,如果表达式的右边是一个日期值或一个日期时间型字段,你可以使用 + 和 - 代替 DATE_ADD() 和 DATE_SUB()(示例如下)。 参数 date 是一个 DATETIME 或 DATE 值,指定一个日期的开始。expr 是一个表达式,指定从开始日期上增加还是减去间隔值。expr 是一个字符串;它可以以一个 “-” 领头表示一个负的间隔值。type 是一个关键词,它标志着表达式以何格式被解释。

    mysql between and date formats
    SELECT * FROM `tablename` WHERE FROM_UNIXTIME(`created`) BETWEEN '2012-03-01' AND '2012-03-31';  


    mysql自然月、自然周选择函数


    1、select date_format(dateColumn,‘%X-%m’),些函数能将自然月筛选出来,如果再加上group by dateColumn,则会将一年中的各个 自然月列出来,为统计自然月数据提供了极大的方便。

    2、select date_format(dateColumn,'%X-%V'),些函数能将自然周筛选出来,如果再加上group by dateColumn,则会将一年中的各个自然周列出来,为统计自然周数据提供了极大的方便。






    mysql自然周推算方法

    目的是要计算给定日期的前一周.


    为了在mysql中实现这个目的


    首先是这样做的:

        SELECT   Date_Format('20121101','%u')-1;

    但这样有问题, 比如给定的日期为年度第一周, 那么这样操作不会得到上一年度的最后一周的周数, 而是-1

        SELECT   Date_Format('20120101','%u')-1;


     因而采用下列方案, 避免年度边界问题, 基本思想就是找到日期所在周的周一, 然后再进行计算:
    SELECT  STR_TO_DATE(CONCAT(Date_Format(20110103,'%x%v'), ' Monday')  , '%x%v %W') - interval 1 week;


    之所以这样处理,参加 mysql官方手册, STR_TO_DATE(str,format) 一节的note:
     You cannot use format "%X%V" to convert a year-week string to a date because the combination of a year and week
     does not uniquely identify a year and month if the week crosses a month boundary. To convert a year-week to a date,
     you should also specify the weekday:
     mysql> SELECT STR_TO_DATE('200442 Monday', '%X%V %W');
     -> '2004-10-18'

    另外 SELECT  STR_TO_DATE(CONCAT(Date_Format(20110103,'%x%v'), ' Monday')  , '%x%v%W') - interval 1 week; 中两处标红部分一定要统一, 因为他们对一周的开始日判断不同, 不统一则会出错.


    %V Week (01..53), where Sunday is the first day of the week; used with %X
    %v Week (01..53), where Monday is the first day of the week; used with %x

    %X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
    %x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v



    展开全文
  • 前面篇获取当前所在的第天和最后一天(http://blog.csdn.net/yysyangyangyangshan/article/details/12222597),今天在用的时候发现个小问题,在...,当时没有考虑到这个的第一天是这个一天的00点开始的...
    前面一篇获取当前所在周的第一天和最后一天,今天在用的时候发现一个小问题,在做一个时间对比时,当时没有考虑到这个周的第一天是这个周的一天的00点开始的。比如某一条记录,
    内容:记录,时间:2013-11-04 08:00:00,

    在12点时查询这条记录,并获取了这周第一天的时间是 2013-11-01 12:00:00,结果记录的时间总是比当前周第一天的时间小。

    所以写代码一定要严谨啊。

    现在做一下修改:第一天的时间统一从0点开始,最后一周的时间截止23:59:59
     public class DateTimeTool
        {
            /// <summary>
            /// 获取指定日期所在周的第一天,星期天为第一天
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDateTimeWeekFirstDaySun(DateTime dateTime)
            {
                DateTime firstWeekDay = DateTime.Now;
    
    
                try
                {
                    //得到是星期几,然后从当前日期减去相应天数 
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
    
                    int daydiff = (-1) * weeknow;
    
    
                    firstWeekDay = dateTime.AddDays(daydiff);
    
    
                    firstWeekDay = new DateTime(firstWeekDay.Year, firstWeekDay.Month, firstWeekDay.Day);
                }
                catch { }
    
    
                return firstWeekDay;
            }
    
    
            /// <summary>
            /// 获取指定日期所在周的第一天,星期一为第一天
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDateTimeWeekFirstDayMon(DateTime dateTime)
            {
                DateTime firstWeekDay = DateTime.Now;
    
    
                try
                {
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
    
                    //星期一为第一天,weeknow等于0时,要向前推6天。   
                    weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1));
    
    
                    int daydiff = (-1) * weeknow;
    
    
                    firstWeekDay = dateTime.AddDays(daydiff);
    
    
                    firstWeekDay = new DateTime(firstWeekDay.Year, firstWeekDay.Month, firstWeekDay.Day);
                }
                catch { }
    
    
                return firstWeekDay;
            }
    
    
            /// <summary>
            /// 获取指定日期所在周的最后一天,星期六为最后一天
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDateTimeWeekLastDaySat(DateTime dateTime)
            {
                DateTime lastWeekDay = DateTime.Now;
    
    
                try
                {
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
    
                    int daydiff = (7 - weeknow) - 1;
    
    
                    lastWeekDay = dateTime.AddDays(daydiff);
    
    
                    lastWeekDay = new DateTime(lastWeekDay.Year, lastWeekDay.Month, lastWeekDay.Day, 23, 59, 59);
    
    
                }catch { }
    
    
                return lastWeekDay;
            }
    
    
            /// <summary>
            /// 获取指定日期所在周的最后一天,星期天为最后一天
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
    
    
            public static DateTime GetDateTimeWeekLastDaySun(DateTime dateTime)
            {
                DateTime lastWeekDay = DateTime.Now;
    
    
                try
                {
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
    
                    weeknow = (weeknow == 0 ? 7 : weeknow);
    
    
                    int daydiff = (7 - weeknow);
     
                    lastWeekDay = dateTime.AddDays(daydiff);
    
    
                    lastWeekDay = new DateTime(lastWeekDay.Year, lastWeekDay.Month, lastWeekDay.Day, 23, 59, 59);
                }
                catch { }
    
    
                return lastWeekDay;
            }
    
    
            /// <summary>
            /// 获取指定日期的月份第一天
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDateTimeMonthFirstDay(DateTime dateTime)
            {
                if (dateTime == null)
                {
                    dateTime = DateTime.Now;
                }
    
    
                return new DateTime(dateTime.Year, dateTime.Month, 1);
            }
    
    
            /// <summary>
            /// 获取指定月份最后一天
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDateTimeMonthLastDay(DateTime dateTime)
            {
                int day = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
    
    
                return new DateTime(dateTime.Year, dateTime.Month, day,23,59,59);
            }
        }
    展开全文
  • 成为数据分析师 第七:Python- CSDN博客 七成为数据分析师 第六:统计学- CSDN博客 七成为数据分析师 第五:Mysql- CSDN博客 七成为数据分析师 第四:数据可视化- CSDN博客 七成为数据分析...

    七周成为数据分析师 第七周:Python - CSDN博客

    七周成为数据分析师 第六周:统计学 - CSDN博客

    七周成为数据分析师 第五周:Mysql - CSDN博客

    七周成为数据分析师 第四周:数据可视化 - CSDN博客

    七周成为数据分析师 第三周:Excel篇 - CSDN博客

    七周成为数据分析师 第二周:业务篇-指标 - CSDN博客

    七周成为数据分析师 第二周:业务篇-框架与模型 - CSDN博客

    七周成为数据分析师 第一周:数据分析思维 - CSDN博客

    目录

    1.核心数据分析思维

    (1). 结构化:

    (2)公式化

    (3)业务化

    2.数据分析思维七大技巧

    1)象限法

    2)多维法

    3)假设法

    4)指数法

    5)80/20法则(帕累托法则)

    6)对比法

    7)漏斗法

    3.数据分析思维锻炼方法

    1)好奇心

    2)生活中的练习 

    3)工作中的练习 

    4.总结



    1.核心数据分析思维

    (1). 结构化:

    案例:现在有一个线下销售的产品。 我们发现8月的销售额度下降,和去年同比下降了 20%。我想先观察时间趋势下的波劢,看是突然暴 跌,还是逐渐下降。再按照不同同地区的数据看一下差异,有没有地区性的因素影响。我也准备问几个销售 员,看一下现在的市场环境怎么样,听说有几家竞争 对手也缩水了,看一下是不是这个原因。顾客访谈也要做,但是往常一直找不出原因,这次我也不抱希 望,姑且试试吧。要是还找不出原因,那我也很绝望啊。

    (2)公式化

    案例

    • 销售额:销量x客单价
    • 利润:销售额收益-成本
    • 销售额:多个商品/sku总和
    • 地区销量:不同渠道的累加
    • 销量细挖

    加法不同同类别的业务叠加。

    减法常用来计算业务间的逻辑关系。

    乘法和除法是各种比例或者比率。

    (3)业务化

    Q:如何预估上海地区的共享单车投放量?

    • 从城市流动人口计算
    • 从人口密度计算
    • 从城市交通数据计算
    • 从保有自行车计算

    结构化思维(捋顺思路) —— 结构化数据(将其可数据化) —— 结构化业务数据(落地,贴合业务)

    案例:

    某一天,xx学院的课程学习人数下跌了,梁老板急得头发都要掉光了,现在,你能不能通过三种思维方式,做出一个假设型的分析案例?

    2.数据分析思维七大技巧

    1)象限法

    • 核心: 象限法是一种策略驱型的思维
    • 优点:直观,清晰,对数据进行人工的划分。划分结果可以直接应用于策略
    • 应用:适用范围广、策略分析、产品分析、市场分析、客户管理、 用户管理、商品管理等
    • 须知:象限划分可以按中位数,也可以按平均数,或者是经验

    案例

     

    2)多维法

    • 用户统计维度:性别、年龄...
    • 用户行为维度:注册用户、用户偏好、用户兴趣、用户流失...
    • 消费维度:消费金额、消费频率、消费水平...
    • 商品维度:商品品类、商品品牌、商品属性... 

    辛普森悖论当人们尝试探究两种变量(比如新生录取率与性别)是否具有相关性的时候,会分别对之进行分组研究。然而,在分组比较中都占优势的一方,在总评中有时反而是失势的一方。该现象于20世纪初就有人讨论,但一直到1951年,E.H.辛普森在他发表的论文中阐述此一现象后,该现象才算正式被描述解释。后来就以他的名字命名此悖论,即辛普森悖论

    解决方法:

    • 核心: 象限法是一种精细驱动的思维
    • 优点:处理大数据量,维度丰富且复 杂的数据有较好的效果。但是 维度过多,会消耗不少时间
    • 应用:只要数据齐全且丰富,均可以应用
    • 须知:对不同维度进行交叉分析时, 需要注意辛普森悖论

    3)假设法

    • 带有方向的预测,没有数据

    很多时候,数据分析是没有数据可明确参考的:比如新迚入一个市场,公司开拓某样产品。老板让你预测一年后的销量,或者产品的数据基础非常糟糕,你拿不到数据。

    案例1:公司在节日进行了一次营销活劢,APP上的销量数据整体比上周上升了20%。因为统计失误问题, 拿不到明细数据,也就是说,活动效果是一个黑盒。现在的问题是,销量本身就有可能因为节日而提高,那么怎么证明活动是有效或者无效的呢?。

    • 假设活动是有效的
    • 思考一下,活动有效的话,会发生什么事情? 会有一定数量的用户购买,如果能证明这条,那么我们有理由相信活劢是有效的。
    • 用户通过活动购买商品,会发生什么可观测的行为呢?
    • 假设有一些用户会评论留言,那么可以统计提及活动的字眼。 当用户提及了这次营销活动,接下来的问题是,有效了多少?10%,20%?
    • 假设参不活动的用户行为没有变化,那么通过历史数据的用户评论占比,反推购买人数


    案例2:你是自营电商的数据分析师,现在想商品提价后,收入会不会有变化?,你会怎么做?

    • 假设商品提价后,销量一定会下跌,问题是销量下跌多少?
    • 首先假设流量不会有变化,流量和渠道营销正相关,商品价格影响转化率,那么现在确定转化率的波
    • 找出平时的转化率(譬如为20%),预估提价后的转化率变化。假设各类型用户对价格敏感度不同,那么将用户划分忠诚XX、普通XX、羊毛XX...
    • 不同用户层次数量不同,反应不同。忠诚用户转化率变化 极低,羊毛几乎不会转化...这些数据可以凭借经验做出假设。最后汇总。
    • 核心:假设是一种启发思考驱劢的思维
    • 优点:当没有直观数据或者线索能分析时,以假设先行的方式进行推断,这是一个论证的过程。
    • 应用:它更多是一种思考方式,假设—验证—判断。
    • 须知:不止可以假设前提,也能假设概率戒者比例,一切都能假设, 只要自圆其说。

    4)指数法

    场景举例:

    • 中国今年的经济指标如何?
    • 美国NBA最佳球星是谁?
    • 竞争对手产品表现的如何?
    • 哪位是天善学院最帅的男人?

    方法

    • 线性加权

    • 反比:采用导数,让其收敛

    • log

    • 核心: 指数法是一种目标驱动的思维
    • 优点:目标驱动力强,直观、简洁、 有效。对业务有一定的指导 用。一旦设立指数,不易频繁变化。
    • 应用:和假设法不同,假设法是缺乏有效的数据,指数法是无法利用数据而将其加工成可利用的。
    • 须知:指数法没统一的标准,很多指 数更依赖经验的加工。

    5)80/20法则(帕累托法则)

    • 核心: 二八法是一种只抓重点的思维
    • 优点:和业务紧密相关,和KPI更紧密相关。几乎花费最少的精力就能达到不错的效果,性价比很优
    • 应用:二八法则存在于几乎所有的领域,所以这种分析思维没有局限。
    • 须知:在条件允许的情况下,数据分析依旧不能放弃全局,否则会让思路变得狭隘  

    6)对比法

    • 核心:对比法是一种挖掘数据规律的思考方式
    • 优点:对比法可以发现很多数据间的规律,它可以与任何思维技巧结合,比如多维对比、象限对比、假设对比等
    • 应用:对比更多是一种习惯,是数据分析的牛角尖,一次合格的分析,一定要用到n次对比
    • 须知:在条件允许的情况下,数据分析依旧不能放弃全局,否则会让思路变得狭隘

    7)漏斗法

    • 核心: 漏斗法是一种流程化思考方弅
    • 优点:单一的漏斗分析没有用,转化 率20%,但是能说明什么呢? 它要和其他分析思维结合,比 如多维,比如对比
    • 应用:涉及到变化和流程的都能用
    • 须知:单一的转化率没有,单一的转 化率没有,单一的转化率没 有。

    3.数据分析思维锻炼方法

    1)好奇心

    案例

    • 啤酒与尿布
    • 去思考生活中商业案例的表现,背后的原理、摆放方法和数据差异

    2)生活中的练习 

    • 例如夜市,一天的人流量?一人的流量?营业额?数据的分析方式?
    • 换做你是商家,如何提高店面的利润?

    3)工作中的练习 

    • 为什么领导和同事不认可?
    • 如果我职位更高,我会怎么分析?
    • 复盘,对于一个月,一年前等等的案例进行对比。需要,每个案例有记笔记的习惯,效果更好
    • 历史分析,用这三种分析思维,分析更多的事情。结构化,公式化,业务化。

    4.总结

    1. 核心思维为重点!结合案例理解了,这三种思维的重要性,运用范围极广,对于问题的思考都可以从这三方面开展。
    2. 七大技巧,展示了具体的分析技巧,但是需要配合分析工具如Python、excel中去实现他,需要记住特点,在需要时运用到数据分析中
    3. 数据分析思维的锻炼,来自于长期的思考习惯,从生活、案例和工作中日积月累的思考与积累,通过自己真正“思考”出来的结果,才是“真正”理解的思维。
    展开全文
  • 7天学会MVC——第1天

    万次阅读 2015-05-05 16:47:21
    原文地址 这是我在CodeProject上面看到的一篇文章,这里是我翻译的中文版,如果有任何翻译不恰当之处,还...那么,挑选一个舒适的星期一开始阅读本系列文章,在一周结束的时候,你就会将使用MVC的新技能收入囊中了!

    原文地址
    这是我在CodeProject上面看到的一篇文章,这里是我翻译的中文版,如果有任何翻译不恰当之处,还望各位不吝赐教!

    本文将带领大家在7天内逐步学习MVC5——第1天
    下载源码

    简介

      正如文章标题所承诺的一样——“7天学会MVC”——本系列文章一共有7篇,一天一篇。那么,挑选一个舒适的星期一开始阅读本系列文章,在一周结束的时候,你就会将使用MVC的新技能收入囊中了!
      
      第1天基本上是热身的内容。我们将会尝试着去理解,为何选择ASP.NET MVC而不是Web Forms?Web Forms存在哪些问题?我们也会围绕Controller和Views进行两个实验。
      


    这里写图片描述

      每次实验完成之后,我们都会进行一个小小的问答环节,讨论一些关于实验中涉及的概念。因此,本文的行文结构都是在每个实验环节之后跟随了一个问答环节。
      如果关于任何实验,你有疑问在问答环节中没有得到解答,欢迎进入原文地址进行提问。

    学习使用ASP.NET MVC之前我们需要准备什么

      我们需要的只是Visual Studio,幸运的是Visual Studio完全免费。如果没有的朋友可以在http://www.visualstudio.com下载Visual Studio。

    ASP.NET与MVC与WebForms之间比较

    “你在阅读本文,说明你了解 ASP.NET,并且想让自己掌握MVC相关知识”

      如果各位亲爱的读者认同上面这句话,那么,本节内容您一定不能错过。

      许多ASP.NET开发人员在第一次接触MVC的时候,都认为MVC跟ASP.NET完全不一样,是全新的技术。事实上,ASP.NET是创建web application的框架,而MVC是一种非常棒的代码构架方式,让我们的代码拥有更好的层次结构。因此,与其说MVC,不如说ASP.NET MVC。

      好,如果说ASP.NET MVC是新技术,那么言外之意老技术是什么呢?答案是:“ASP.NET Web Forms”。

    让我来更正你的认知:
      “你在阅读本文,说明你了解ASP.NET Webforms,并且想让自己掌握ASP.NET MVC相关知识”。

      现在你的认知已经正确,欢迎来到ASP.NE T MVC的世界,让我们开始我们的旅程吧。

    为何使用ASP.NETWebForms?

      ASP.NET Webfroms已经成功地为web application服务了12年。让我们来试着了解,Webforms如此流行和成功背后的秘密。

      如果你从VB时代就开始见证了微软编程语言的成功,你应该知道这都归功于RAD(Rapid Application Development)快速应用程序开发和可视化编程方法。可视化编程是如此地普及和成功,微软简单直白地将它的IDE命名为“Visual Studio”。


    visual studio

      使用Visual Studio,开发人员可以通过“拖拽”UI元素的方式创建前端界面,在后端Visual Studio会为这些UI元素自动生成相应的C#或者VB代码。这些代码术语叫做“Behind Code”或者“Code Behind”,在这些后置代码中,开发人员可以书写逻辑代码操作UI元素。

    这里写图片描述

      微软的可视化RAD构架由两部分组成,其一是UI元素,其二是后置代码。在ASP.NET Webforms中有ASPX文件和ASPX.CS文件,在WPF中有XAML文件和XAML.CS文件。

    ASP.NET Web Forms的一些问题

      既然ASP.NET Webforms如此成功,为何微软要推出ASP.NET MVC呢?ASP.NET最大问题在于效率、效率还是效率!在web application中,效率主要体现在两个方面

    - 1.响应时间:服务器响应请求有多快呢?
    - 2.带宽消耗:发送了多少数据?

    响应时间的问题

      让我们尝试着去理解为何ASP.NET Webforms的响应时间会更长,我们做了一个小小的加载时间测试的实验,加过显示ASP.NET MVC网站的加载时间为ASP.NET Webforms网站加载时间的一半!


    这里写图片描述
    点击这里了解我们如何进行测试

      让我们试着去理解为何ASP.NET MVC在上述的加载测试中有更高的效率。下面是一段简单的UI代码和它的后置代码。
      假设ASPX代码有下面这个简单的textbox。

    <asp:TextBox ID="TextBox1" runat="server">

      在后置代码中,书写一些逻辑代码操作text box的值和背景色

    protected void Page_Load(object sender , EventArgs e)
    {
        TextBox1.Text = "Make it simple ";
        TextBox1.BackColor = Color.Aqua;
    }

      运行代码,HTML效果如下:


    HTML效果

      上面的HTML效果,和以下代码的运行结果相似:

    <input name="TextBox1" type="text" value="Make it simple" id="TextBox1" style="background-color:Aqua" />

      现在我们停一会儿,闭上眼思考以下问题:

    - 1.这是一种高效率的生成HTML的方式吗?为了在浏览器上获得这些简单的HTML,我们真的需要翻山越岭地去请求服务器吗?
    - 2.开发人员就不能直接书写HTML吗?这有这么难吗?
    -


    这里写图片描述

      仔细观察网页的每一次请求,你会发现存在着一个将服务器端控件转换为HTML输出的转换逻辑。当HTML中有Grid、TreeView等等控件,或者有复杂的表格的时候,转换逻辑将变得糟糕和笨重。由于这种不必要的转换,响应速度变慢。

      解决方法:“远离后置代码”,挽起衣袖来书写纯HTML代码吧!

    带宽消耗

      Viewstate对于ASP.NET开发人员,可以说是超过10年的亲密朋友了。Viewstate自动帮我们保存本次post back 和上次post back的状态,节省了开发时间。但是,在节省时间的同时,也带来了巨大的消耗,viewstate让页面的大小增大了相当多。在加载测试里面我们发现,viewstate让页面大小增加了一倍,相比ASP.NET MVC。

      下图展示了Webform和ASP.NET MVC发出的内容的长度:


    这里写图片描述

      由于viewstate产生了额外的字节,使得内容大小增加,下图是viewstate的截图。许多朋友会说,可以禁用viewstate。但是只要存在可能性,开发人员一定会找出解决的途径!


    这里写图片描述

      解决方案:“远离服务器控件 !”
      提示:接下来列出的三个其他问题,也是由于后置代码和服务器控件带来的问题,但是最重要的永远是效率!

    HTML定制

      现在我们都是后置代码和ASP.NET服务器控件的奴隶,我们完全不知道会产生什么样的HTML以及其效率如何。例如,你可以猜测一下,以下的ASPX代码会产生什么样的HTML:

    <asp:Label ID="Label1" runat="server" Text="I am label">
    <asp:Literal ID="Literal1" runat="server" Text="I am a literal">
    <asp:Panel ID="Panel1" runat="server">I am a panel

      Label控件会生成DIV标签或者SPAN标签吗?运行上面的代码,你会发现Label生成了SPAN标签,Literal生成纯文本,Panel生成DIV等等。

      与其用服务器控件生成HTML,不如直接书写HTML然后全权掌控呢?

      因此这个问题的解决方案是:“不要使用服务器控件”,直接书写HTML。

      直接和HTML打交道的另外一个巨大的好处是,网站UI和开发团队可以很“近距离”地合作。他们可以使用最喜欢的设计工具来比如Dream Weaver、front page等等,来开发HTML代码。如果我们使用了服务器控件,这些设计工具可能就不能轻易地识别它们了。

    后置代码类的可重用性

      如果你观察任何专业的ASP.NET Webform工程,你会发现在后置代码类中存在着大量的复杂的代码。页面的后置代码类继承自“System.Web.UI.Page”类,这个类并不像普通的类可以在任何地方重用和实例化,也就是说,你永远不可能对一个Webform类完成下述代码:

    WebForm1 obj = new WebForm1();
    obj.Button1_Click();

      因为“WebForm”类不能在没有“请求”和“响应”对象存在的情况下被实例化。如果你曾经见过“WebForm”的“Button_Click”事件,它们应该类似下述代码。从代码中你就可以知道要实例化同样的对象多么困难。

    protected void Button1_Click(object sender,EventArgs e)
    {
        //The logic which you want to reuse and invoke
    }

      解决方案:“远离服务器控件和后置代码”

    单元测试

      正如前文所述,你不能直接实例化后置代码,因此想对其做单元测试和自动测试十分困难,你需要手动运行程序进行测试。

    如何解决?

      如果你阅读了前文提到的四个关于ASP.NET WebFrom的问题,你会知道,罪魁祸首就是“服务器控件”和“后置代码”。下图是我对问题根源做出的图解,我从问题表象开始,分析其出现的原因和解决方案,最后整个图解都汇集到“服务器控件”和“后置代码”两个家伙的身上。


    这里写图片描述

      解决这些问题,我们需要将后置代码转移到独立的简单类库中,同时远离服务器控件,直接和简单的HTML打交道。
      简而言之,我们需要的解决方案应该达到如下效果:

    这里写图片描述

    微软ASP.NET MVC如何解决Web Forms中的问题?

      如前文所述,服务器控件和后置代码是问题的根源。如果你观察当下开发人员使用的WebFrom构架,你会发现它们大多数都是3层构架的方式。3层构架包含了一个UI层,UI层包含了ASPX和CS代码。

      这个UI层和.NET类也就是中间层(或者说业务逻辑层)打交道,中间层和数据访问层(DAL)打交道。


    这里写图片描述

      ASP.NET MVC由三个部分组成:Model,View,Controller。后置代码逻辑在Controller中,View就是ASPX也就是纯HTML,Model就是中间层。你可以在上图中看到它们如何分工合作。
      我们可以看到,主要有两个方面的改变:View变成了单纯的HTML,后置代码变成了简单的.NET类也就是Controller。

      在ASP.NET MVC中,请求流转过程如下:
      ● Step 1:请求首先到达Controller
      ● Step 2:Controller根据请求创建相应的Model对象,Model对象访问数据访问层获取数据。
      ● Step 3:Model中的数据传输到View中进行展示。


    这里写图片描述

      
      既然我们已经了解了ASP.NET MVC中不同的组件,我们就开始深入了解它们吧,还是用一些实验作为引子。我们从Controller开始,因为Controller是MVC构架中最重要也是核心的部分。

    理解ASP.NET MVC中的Controller?

      为了理解Controller我们首先要理解用户交互逻辑。

    什么是用户交互逻辑?

    场景1
      你是否思考过,当用户在浏览器中输入URL地址的时候,都发生了什么?


    这里写图片描述

      浏览器向服务器发出请求,服务器响应请求。

    这里写图片描述

      同坐这样的请求方式,客户端尝试着和服务器端进行交互。服务器之所以能够对请求做出响应,是因为服务器中存在着一些处理逻辑。

    一些处理逻辑?到底是什么逻辑?
      处理用户请求和用户跟服务器交互的逻辑,也就是用户交互逻辑。

    场景2
      服务器发出的响应内容也可能是单纯的HTML响应,HTML响应可以由一些input控件和一个submit button按钮组成。


    这里写图片描述

      当点击“SaveCustomer”按钮的时候会发生什么?
      如果你的回答是:“一些事件处理句柄会处理点击事件”,那么,非常抱歉。
      “在网络应用程序里面,根本就没有‘事件’这个概念。由于微软的ASP.NET Webforms为我们写了一些代码,导致我们感觉像是在做‘事件驱动式’编程一样,其实这只是一种空想或者说是幻觉。”

      当按钮被点击的时候,只是发送了一个简单HTTP请求到服务器,随同请求一起发送还有“Customer Name”、“Address”、“Age”的值(术语叫做“values are posted to the server”)。总之,要想服务器对请求做出响应,服务器端必须有相应的处理逻辑,也就是用户交互逻辑必须在服务器端书写好。
      在ASP.NET MVC中,C字母代表Controller,也是处理用户交互逻辑的模块。

    实验1-用Hello World来演示Controller

      
    Step 1-创建 Asp.Net MVC5 工程
      Step1.1 打开Visual Studio2013(或者更高版本)。点击 文件>>新建>>工程


    这里写图片描述

      
      Step1.2 选择Web Application,输入名字,选择路径,点击OK。

    这里写图片描述

      Step1.3 选择MVC模块

    这里写图片描述

      Step1.4 点击“Change Authentication”,选择“No Authentication”,点击ok。

      Step1.5 点击OK。
      
    Step 2-创建Controller
      Step 2.1 在解决方案资源管理器中右击Controller文件夹,选择添加>>控制器


    这里写图片描述

      Step 2.2 选择“空MVC5控制器”,点击添加


    这里写图片描述

      
      Step 2.3 将控制器命名为“TestController”点击添加。
      在这一步中,非常重要的一点是不要将后面的“Controller”删掉,你可以将其看做一个保留关键字。
      
    Step 3-创建Action 方法
      打开新创建的TestController类。你会发现里面有个Index方法。删掉它,新加一个“GetString”的public方法,如下:

    public class TestController : Controller
    {
        public string GetString()
        {
            return "Hello World is old now. It&rsquo;s time for wassup bro;)";
        }
    }

      
    Step 4 运行并测试
      按下F5,在浏览器地址栏输入“ControllerName/ActionName”,如下图所示。不要输入“Controller”单词,只要输入“Test”即可。


    这里写图片描述

    关于实验1的问答

    TestController和Test之间有什么关系?

      TestController是类名而Test是控制器的名称,请记住,在输入URL的时候,输入控制器名称就好,不要加上Controller。
      
      Asp.Net MVC遵循基于约定的方法,严格地遵循我们使用的约定。

      在Asp.Net MVC中两个事情非常重要:
      1.如何命名?
      2.如何放置?
      

    什么是Action方法?

      Action方法只是Controller内部的一个public方法,用来接收用户的请求然后返回一些响应。在上面的例子中,action方法“GetString”返回一个string类型的响应。

      提示:在Asp.Net Webforms中,默认的响应返回总是HTML。如果我们要返回其他的内容,我们新建HTTP handlers,重写content类型,调用 response.end()等等,这些都不是轻松地事情。在Asp.Net MVC中要做到这些很轻松,如果返回类型是string,你可以就返回string,你不需要发送完整的HTML。
      

    当我们尝试用action方法返回object的时候,会发生什么?

      看看下面的代码段

    namespace WebApplaction1.Controllers
    {
        public class Customer
        {
            public string CustomerName{get;set;}
            public string Address{get;set;}
        }
        public class TestController : Controller
        {
            public Customer GetCustomer()
            {
                Customer c =new Customer();
                c.CustomerName="Customer 1";
                c.Address="Address1";
                return c;
            }
        }
    }

      上面action方法的输出如下:


    这里写图片描述

      当返回类型为类似“Customer”的对象时,会返回该对象对‘ToString()’方法的实现。默认的‘ToString()’方法会返回完整的类名,也就是“NameSpace.ClassName”。
      

    如果你想在上例中获得其属性值,该如何做?

      只需要重载“ToString”方法即可:

    public override string ToString()
    {
        return this.CustomerName+"|"+this.Address;
    }

      按下F5,输出如下:


    这里写图片描述
      

    是否必须在action方法前面加上public访问修饰符?

      是的,每一个public方法都会自动成为action方法。
      

    非public方法有什么含义?

      它们只是类内部的非public的方法而已,简单地说,它们不能web调用。
      

    如果我们想要一个非action方法的public方法,该怎么做?

      只需要加上NonAction特性即可,如下:

    [NonAction]
    public string SimpleMethod()
    {
        return "Hi, I am not a action method";
    }

      当我们试着去访问上面的方法的时候,会得到如下的响应:


    这里写图片描述
      
      

    理解ASP.NET MVC中的Views

      从之前的讨论中,我们知道Controller会处理用户的请求和发送响应,最通常的响应是HTML,浏览器能够更好的理解这种格式。HTML会带有一些images,texts,input控件等等。一般而言的UI层,在Asp.Net MVC 中就是View层。
      
      

    实验2-演示Views

      在第一个实验中,我们创建了一个简单的MVC应用,只有一个controller以及返回简单的string类型,让我们着手该MVC应用的View部分吧。

    Step1-新建 action method

      在TestController中添加新的action方法,如下:

    public ActionResult GetView()
    {
        return View("MyVeiw");
    }

    Step2-创建View

      Step2.1 右键点击上面的action方法,选择“添加视图”


    这里写图片描述

      Step2.2 在“添加视图”对话框中,将视图名称改为MyView,取消“使用母板页”的选项,点击“添加”.

    这里写图片描述

      之后,系统会在“View/Test”文件夹中添加该视图。

    这里写图片描述

      
      

    Step 3-向视图中添加内容

      打开MyView.cshtml文件,添加如下内容:

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width" />
    <title>MyView</title>
    </head>
    <body>
    Welcome to MVC 5 Step by Step learning
    </body> </html>

    Step 4-运行测试

      按下F5运行程序,输出如下:


    这里写图片描述

      

    关于实验2的问答

    为什么视图被放到了Test文件夹

      在ASP.NET MVC中,View和特定的Controller相关联,并且被放置在特定的文件夹里面。这个特定的文件夹将会以“ControllerName”来命名,并且放置在View文件夹下。对于每一个Controller,只有放在相对应的文件夹中的View才可以被访问。

      例如:所有跟Test Controller相关的Views都会被放置到“~/Views/Test”,Test Controller只能访问Test文件夹中的Views。

    我们不能在多个Controllers中重用一个View吗?

      可以,将这些视图放在“Shared”文件夹中即可。


    这里写图片描述

      Shared文件夹中的view可以被所有Controller访问。

    一个action方法可以引用多个view吗?

      可以,如下:

    public ActionResult GetView()
    {
        if(Some_Condition_Is_Matching)
        { 
           return View("MyView");
        }
        else
        {
           return View("YourView");
        }
    }

    View功能的目的是什么?

      创建ViewResult对象,渲染响应的HTML视图
      ●ViewResult内部创建ViewPageActivator对象
      ●ViewResult选择正确的ViewEngine,将ViewPageActivator作为参数传递给ViewEngine的构造函数。
      ●ViewEngine创建View类的对象
      ●ViewResult调用View的RenderView方法
      提示:我们有单独的讨论ASP.Net MVC的生命周期细节的话题。

    ActionResult和ViewResult的关系是什么?

      ActionResult是抽象类,ViewResult是ActionResult的多层子类。多层是由于ViewResult是ViewResultBase的子类,ViewResultBase是ActionResult的子类。

    如果我们想要返回ViewResult,为何ActionResult是ViewResult?

      为了实现多态性,如下:

    public ActionResult GetView()
    {
        if(Some_Condition_Is_Matching)
        { 
           return View("MyView");
        }
        else
        {
           return Content("Hi Welcome");
        }
    }

      在上面的例子中,当某些条件满足的时候,我们在返回的时候调用“View”函数,返回ViewResult,在其他的条件中,我们调用“Content”函数返回ContentResult。

    什么是ContentResult?

      ViewResult呈现了完整的HTML响应,而ContentResult呈现了纯文本响应,就像返回string类型一样。不同之处在于,ContentResult是针对ActionResult的string类型结果的包装,ContentResult也是ActionResult的子类。

    可以无参数调用View函数吗?

      可以,那样的话,View函数将会找到以当前“ActionName”命名的View。

    第2天将会学习什么?

      第二天我们将会谈到Models,Validation,JQuery,Json。
      让我们一起学习,一起嗨!

    展开全文
  • 一周学会Linux实战

    万次阅读 2012-09-01 09:15:15
    为什么学习Linux? 1、Linux的性能卓越。 Linux是个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中型,大型甚至是巨型项目都在使用Linux。很多软件公司考虑懂啊开发成本都...
  • 一年第几

    千次阅读 2016-08-01 15:33:05
    因此,2016年第一周从1月4号开始。  2016年有多少周末  从2016年得1月1日是星期五可以得出,  2016年最后两是星期五和星期六。  所以,2016年有53个星期六,52个星期。  2016年有多少周  201
  • 无小意 个人博客:无小意 知乎主页:无小意丶 公众号: 数据路(shuju_lu) 百日计划第一周总结 1. 计划 ...1.彻底结束之前预定暑假完成的天善学院课程《七周数据分析师》 ...第一周:数...
  • 在东软正式培训的第一周

    千次阅读 2008-03-16 18:02:00
     这一周正式培训感觉的一个字就是:累。安排的课程相当的紧,早上一般都是6点50起床(还是比较晚的),然后赶7点50的班车,中间要走10多分钟的路,到公司就8点20左右。 其实也没正式上课,第一,安排的是东软的...
  • 根据给定的日期,计算该日期在本月所在周数,每周的第一天为...而2月份的1、2、3、41月份的最后一周(第五周)。  declare @datetime varchar(50)  select @datetime = '2012-02-1' select dateadd
  • 一周自学动态网站设计

    万次阅读 多人点赞 2011-12-18 17:26:36
    (网站:http://chentingpc.me) 设计这个网站的框架与0.1版本的实现,花了总共六多的时间,将近五六十个小时。实际上,在做需求分析、页面与系统设计的时间占了将近四,而真正动态功能的部分只花了两时间...
  • oracle 获取日期属于哪一年的哪一周

    千次阅读 2015-02-04 10:54:46
    最近做了一个按周为周期做的统计,即以周为列名做group by从而获取有效数据的数量。 以上描述有点乱七八糟的,直接说这里要做什么吧。目标:获取某个日期属于哪一年的哪一周,即标题。哈哈~ 这里需要用到Oracle中...
  • 一周信创舆情观察(5.24~5.30)

    万次阅读 2021-06-04 14:51:56
    一、一周舆情要点 政策方面,国资委党委委员、副主任翁杰明日前撰文指出,持续推进5G网络、数据中心、物联网、卫星互联网等新型基础设施建设,加快培育一批云计算、大数据、集成电路、人工智能等领军企业,深入推进...
  • //根据当前时间计算两周前的时间,结果2018-7-11类似的结构 function cal_twoweekago(){ var date1 = new Date().getTime(); var date2 = date1 - 2*7*24*60*60*1000; return new Date(date2)....
  • 7天时间管理

    千次阅读 2011-12-07 08:42:30
    今天是课程的第一天,我们将通过个练习和一套自测题来了解什么是时间管理。 请先完成下面这个小练习,在后面我们将以它作为讲解实例。 练 习 假设现在是星期的晚上,你要计划未来五的日程,面前是这五...
  • 一周信创舆情观察(1.11~1.17)

    万次阅读 2021-01-21 13:44:56
    一、一周舆情要点 1月13日,工信部印发《工业互联网创新发展行动计划(2021-2023年)》。标志着过去三年工业互联网起步期各项任务圆满完成,新三年快速成长期的大幕已经拉开。此次《行动计划》的印发,回应了市场...
  • 一周信创舆情观察(12.14~12.20)

    万次阅读 2020-12-25 18:40:44
    一、一周舆情要点 12月16日至18日,中央经济工作会议在北京举行。会议明确明年八大重点任务,“强化国家战略科技力量”和“增强产业链供应链自主可控能力”位列所有任务的前两位。政策从去年提出的三大攻坚战、精准...
  • 一周信创舆情观察(7.20~7.26)

    千次阅读 2020-07-28 19:25:17
    一、一周舆情要点 第19届中国互联网大会本周开幕,大会以“共迎网络新时代 共创产业新未来”主题。工信部部长苗圩在会上表示,要加快新型基础设施建设,加快5G、工业互联网发展,深入实施“5G+工业互联网”512工程...
  • 一周信创舆情观察(2.22~2.28)

    千次阅读 2021-03-03 16:03:15
    一、一周舆情要点 2月23日至25日,第9届世界移动通信大会(MWC)在上海举办。工业和信息化部副部长刘烈宏在开幕式上表示,中国累计建成5G基站超过71.8万个,约占全球的70%;5G终端连接数超过2亿。大会现场,传媒行业...
  • 一周信创舆情观察(11.2~11.8)

    千次阅读 2020-11-13 18:05:06
    一、一周舆情要点 11月3日,新华社受权发布《中共中央关于制定国民经济和社会发展第十四个五年规划和二〇三五年远景目标的建议》。《建议》分论部分阐述了“十四五”时期经济社会发展和改革开放的12项重点任务。其中...
  • shell脚本(删除7天之前的文件)

    千次阅读 2019-09-18 05:24:19
    #!/bin/bash ######################### #删除7天之前的文件# #2019年6月15日18:12:26# ######################### path=/opt/teach/shell/project/test/ find$path-typef-mtime+7|xargsrm-rvf #f...
  • 本期一周AI看点包括行业热点、投融资、业界观点、技术前沿以及应用等方面。 01 行业 NASA开发AI竞赛无人机,欲挑战人类职业玩家 近日,NASA喷气推进实验室(Jet Propulsion ...
  • mysql查询最近7天的数据,没有数据自动补0; 正常的数据库中的表, 某天如果没有数据的话, 以creattime字段基准进行数据统计就会;出现订单量0的 统计不到;  解决方法: 1. 就是想方设法的创建一张虚拟的...
  • 条件where to_days(addtime) = to_days(now()); 这里要了解to_days()函数的意思。定一个日期,返回个天数(年0以来的天数)。 where DATE_SUB(CURDATE(), INTERVAL 7 DAY)
  • 使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0 //查询当天日期在一周年的数据 SELECT * FROM A where datediff(d,datetime,getdate())
  • 一周,我终于开发完成了公司的聚合代扣支付网关!!! 今天就给大家介绍一下微信代扣和支付宝的周期扣款那些事。 一、场景 在很多实际的商业场景中,有很多周期性扣款的需求,比如每个月收一次水电费,小区每个月...
  • 如何在7天内快速完成游戏原型设计

    千次阅读 2015-03-30 13:52:57
    作者:Shalin Shodhan、Matt Kucic、Kyle Gray、Kyle Gabler 这是个疯狂的游戏创意:用大堆的纳豆似的黏黏球搭成...《黏黏之塔》这款游戏在个月内破天荒地超过了10万个下载,被某杂志封”当月网络最佳游戏
  • SQL中获取日期当前的第几

    千次阅读 2012-08-14 15:53:31
    最近做报表需要取某是当年的第几周,用到了两个取周的函数。... 比如:2011/01/01 是周六, 在Oracle中被定义2011年的第一周的第一; SELECT to_char(TO_DATE('20110101','YYYYMMDD') ,'yyyyww') as week...
  • 1752年9月为什么少了11

    千次阅读 2019-02-16 00:26:44
    这是为什么呢,感觉挺有趣的,就查了下, 究其原因:cal 指令源自美国 AT&amp;T 的 UNIX,也因此继承了美国的历史。时间回到 1752 年。1752年9月大英帝国极其所属美洲殖民地的恺撒历法被格里高利教皇历法所取代...
  • create or replace procedure find_current_week ... -- 当年第一周的天数 v_first_day varchar2(100); -- 当年第一 v_first_day_week varchar2(100); -- 当年第一星期几 v_week number; -- 当年第几周 begin
  • 文章目录一、选中一周后,显示的是*2020第42周*,我希望显示*2020年10月12日至2020年10月18日*这样,或者自定义;二、不可选本周以后的日期,或者本周以前的日期不可选 这里面有个小坑,得先看下 提示:这个日期...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,507
精华内容 32,202
关键字:

为什么7天定为一周