2017.9.7 关于时间、SQL关联查询的几个操作

分享人:周倩宇

1. JS求时间差

网址:http://www.cnblogs.com/cm490893449/archive/2010/10/26/1861230.html

var date1=new Date();  //开始时间
alert("aa");
var date2=new Date();    //结束时间
var date3=date2.getTime()-date1.getTime()  //时间差的毫秒数
 

//计算出相差天数
var days=Math.floor(date3/(24*3600*1000))
 
//计算出小时数

var leave1=date3%(24*3600*1000)    //计算天数后剩余的毫秒数
var hours=Math.floor(leave1/(3600*1000))
//计算相差分钟数
var leave2=leave1%(3600*1000)        //计算小时数后剩余的毫秒数
var minutes=Math.floor(leave2/(60*1000))
 

//计算相差秒数
var leave3=leave2%(60*1000)      //计算分钟数后剩余的毫秒数
var seconds=Math.round(leave3/1000)
 

alert(" 相差 "+days+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒")

2. JS日期格式化转换方法

网址:http://www.cnblogs.com/tugenhua0707/p/3776808.html

  • 将日期转换为指定的格式:比如转换成 年月日时分秒 这种格式:yyyy-MM-dd hh:mm:ss 或者 yyyy-MM-dd。

可以为Date原型添加如下的方法:

Date.prototype.format = function(fmt) { 
     var o = { 
        "M+" : this.getMonth()+1,                 //月份 
        "d+" : this.getDate(),                    //日 
        "h+" : this.getHours(),                   //小时 
        "m+" : this.getMinutes(),                 //分 
        "s+" : this.getSeconds(),                 //秒 
        "q+" : Math.floor((this.getMonth()+3)/3), //季度 
        "S"  : this.getMilliseconds()             //毫秒 
    }; 
    if(/(y+)/.test(fmt)) {
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
    }
     for(var k in o) {
        if(new RegExp("("+ k +")").test(fmt)){
             fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
         }
     }
    return fmt; 
}

比如我们可以这样调用下:

var time1 = new Date().format("yyyy-MM-dd hh:mm:ss");console.log(time1);

运行如下:



也可以转换成 ”年月日”的格式

var time2 = new Date().format("yyyy-MM-dd");console.log(time2);

运行如下:


  • 将指定的日期转换为"年月日"的格式,代码如下:

   var oldTime = (new Date("2012/12/25 20:11:11")).getTime();
    var curTime = new Date(oldTime).format("yyyy-MM-dd");
    console.log(curTime);

运行如下:


  • 将 "时间戳" 转换为 "年月日" 的格式.

比如如下代码:

var da = 1402233166999;   
da = new Date(da);    
var year = da.getFullYear()+'年';    
var month = da.getMonth()+1+'月';    
var date = da.getDate()+'日';    
console.log([year,month,date].join('-'));

运行如下:


3. JS获取url中参数值QueryString()

网址:http://www.jb51.net/article/94448.htm

获取url的querystring参数

获取url的querystring参数的两种方法如下:

  • 方法一:正则匹配

//获取url中的参数
function getQueryString(name) {
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", i); // 匹配目标参数
  var result = window.location.search.substr(1).match(reg); // 对querystring匹配目标参数
  if (result != null) {
    return decodeURIComponent(result[2]);
  } else {
    return null;
  }
}

对于http://localhost/index.html?q1=abc&q2=efg&q3=h的url,获取 q1 参数值的方法如下:

var q1 = getQueryString('q1'); // abc
  • 方法二:split

function getQueryString() {  
  var qs = location.search.substr(1), // 获取url中"?"符后的字串  
    args = {}, // 保存参数数据的对象
    items = qs.length ? qs.split("&") : [], // 取得每一个参数项,
    item = null,
    len = items.length;
 
  for(var i = 0; i < len; i++) {
    item = items[i].split("=");
    var name = decodeURIComponent(item[0]),
      value = decodeURIComponent(item[1]);
    if(name) {
      args[name] = value;
    }
  }
  return args;
}

对于http://localhost/index.html?q1=abc&q2=efg&q3=h 的url,获取 q1 参数值的方法如下:

var qs = getQueryString(); 
var q1 = qs["q1"]; // abc

用上面两种getQueryString()方法都能很好地解决获取url的querystring参数问题。就此顺便整理一下Location对象,方便日后学习参考。详情看上面网址。

4. 日期为1900-01-01时,不显示

var date1 = (new Date(data.date)).getTime();
var date2 = new Date(date1).format("yyyy-MM-dd");
console.log(date2 );

if (!RegExp("1900").test(date2 )) {
     $("#date2 ").append(date2 );
} else {
  $("#date2 ").append("");
}

5. SQL中的关联查询

表1 name sex
表2 name age
表3 name age

表一中name如果在表二中则用表二age的数据,在表三中则用表三age的数据:

select  case 
when t2.name  is not null then t2.age  
when t3.name  is not null then t3.age as age
from t1 left  join t2 on t2.name =t1.name  
left  join t3 on t3.name =t1.name ;

附:SQL中CASE关键字的使用:http://blog.csdn.net/wuzuodingfeng/article/details/53523176

从多个表中查数据到一个视图中

select Tid,
       PmSupplyCDCNo,
       PmSupplyName,

       (select psri.PsriSupplyTypeInAssess
          from PmSupplyReportInfo psri
         where psb.Tid = psri.PsriRefTid) as PsriSupplyTypeInAssess,

       PmSupplyAdress,

       (select psac.PsacProjectType
          from PmSupplyAuthorContent psac
         where psb.Tid = psac.PsacRefTid) as PsacProjectType,

       (select psac.PsacConclusion
          from PmSupplyAuthorContent psac
         where psb.Tid = psac.PsacRefTid) as PsacConclusion,

       PmSupplyContactPTel,
       PmSupplyContactPEmail,

       (select pscr.PscrOpraDate
          from PmSupplyCommentRecord pscr
         where pscr.PscrPsNextStepFlag = '1201'
           and pscr.PscrPrevOrNext = '101'
           and psb.Tid = PscrRefPsbiTid) as PscrOpraDate,

       (select CONVERT(varchar(100),
                       SUBSTRING(psac.PsacConclusion,
                                 CHARINDEX(':', psac.PsacConclusion) + 1,
                                 DATALENGTH(psac.PsacConclusion)),
                       23) as PscrOpraDate
          from PmSupplyAuthorContent psac
         where isdate(SUBSTRING(psac.PsacConclusion,
                                CHARINDEX(':', psac.PsacConclusion) + 1,--CHARINDEX返回“:”在psac.PsacConclusion中索引,若不存在,则返回0
                                DATALENGTH(psac.PsacConclusion))) = 1--DATALENGTH返回用于表示任何表达式的字节数。
           and psac.PsacRefTid = psb.Tid 

        union all (select dateadd(year, 2, pscr.PscrOpraDate)
                    from PmSupplyCommentRecord pscr,
                         PmSupplyAuthorContent psac
                   where pscr.PscrPsNextStepFlag = '1201'
                     and pscr.PscrPrevOrNext = '101'
                     and psb.Tid = pscr.PscrRefPsbiTid
                     and isdate(SUBSTRING(psac.PsacConclusion,
                                          CHARINDEX(':', psac.PsacConclusion) + 1,
                                          DATALENGTH(psac.PsacConclusion))) = 0--isdate判断该数据是否是日期
                     and psac.PsacRefTid = psb.Tid)) as PscrExpiryDate,

       (SELECT SUBSTRING(psac.PsacConclusion, CHARINDEX(':', psac.PsacConclusion) + 1, DATALENGTH(psac.PsacConclusion)) AS bz
            FROM PmSupplyBaseInfo psb, PmSupplyAuthorContent psac
            WHERE isdate(SUBSTRING(psac.PsacConclusion, CHARINDEX(':', psac.PsacConclusion) + 1, DATALENGTH(psac.PsacConclusion))) = 0
            AND CHARINDEX(':', psac.PsacConclusion) = 0
            AND psac.PsacRefTid = psb.Tid) as bz  ,

       PmSupplyStatus
  from PmSupplyBaseInfo psb
 where psb.PmSupplyStatus in ('1201', '1301', '1401')

6. jquery中append、prepend, before和after方法的区别

网址:http://blog.csdn.net/yexudengzhidao/article/details/54709224

  • append()和prepend()

假设

//<---you want div c to append in this
b

使用

$('.a').append($('.c'));

效果如下:

//<---you want div c to append in this
b
c

同样使用

$('.a').prepend($('.c'));

效果如下:

//<---you want div c to append in this
c
b
  • 使用after()和before()

同样使用假设代码:

$('.a').after($('.c'));

效果如下:

b
c

同样使用before()

$('.a').before($('.c'));

效果如下:

c
b

总结:

append() & prepend()是在元素内插入内容(该内容变成该元素的子元素或节点),after() & before()是在元素的外面插入内容(其内容变成元素的兄弟节点)。

你可能感兴趣的:(2017.9.7 关于时间、SQL关联查询的几个操作)