Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >当MES遇上PLC——SOAP篇(下)

当MES遇上PLC——SOAP篇(下)

作者头像
剑指工控
发布于 2022-11-14 11:00:51
发布于 2022-11-14 11:00:51
1.4K00
代码可运行
举报
文章被收录于专栏:剑指工控剑指工控
运行总次数:0
代码可运行

前 言:

前段时间,有客户在网上看到了我们边缘计算模块产品,找到了我们,跟我们描述了他们目前遇到的问题:

某汽车零部件制造厂在进行智能工厂的升级改造,工单派发和生产顺序指定由MES系统完成,西门子1200 PLC负责生产控制系统。但是,MES系统只能提供SOAP协议给PLC

在第一部分介绍中当MES遇上PLC——SOAP篇(上)(含调试程序)),我们详细讲解利用伟联科技的边缘计算模块(WL-320E-M)建立起它和PLC之间的连接,今天让我们继续,让MES系统的数据,流畅地传输到PLC中

3. PLC请求订单数据

该部分功能为实现PLC从数据库获取未生产订单,当PLC发出数据库请求信号时,边缘计算模块先将正在生产表内订单信息转移到生产完成表内,清空正在生产表。然后,边缘计算模块会从数据库内获取当前未生产订单表内存在的订单信息,判断是否已经生产完毕。

如果已经从未生产表内查不到任何订单信息,表示所有订单生产完毕,此时向PLC内变量发送一个信息,通知PLC。

如果未生产表内还有信息,会将排列在前面的一组订单信息(相同任务号的一组,包含≤10条信息)读取回来,将该信息传输给PLC相应的变量,同时,将该组信息转移到正在生产表中。并且将该信息从未生产表内删除。

使用到的节点如下

S7-in西门子PLC变量读取(FBDBTrig):用于读取PLC内FB部分数据库触发变量值。对于RBEXE部分,读取的就是RBEXE的数据库触发变量值。

Function函数(检测PLC信号):用于判断PLC值,相当于让PLC值变为一个上升沿信号。

Change设定(获取全局):获取当前数据库连接状态,将状态变量值设定给下一节点的输入属性。

Function函数(判断连接状态):判断当前数据库连接状态是否正常。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var sta = msg.payload
if( sta == "OK" || sta == "connected") //判断数据库连接是否正常
{
        msg.payload = 1
        return msg;
}
else
{
   //只有判断到数据库连接正常后才输出,否则无输出
}

Function函数(获取FB正在生产表数据):编写SQL语句,获取FB正在生产表内数据。对于RBEXE,只需将其中表名称更换即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr1,SQLStr2  //定义SQL语句
 
SQLStr1 = "select taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime from FBExecutingOrder order by ID limit 1"
//查询未生产订单表里面是否还有数据
msg.payload = SQLStr1
return msg;

change设定(设定SQL语句):设定SQL语句到下一节点的topic属性。

Mysql节点,用于连接MYSQL数据库和执行SQL语句,返回执行结果。

Function函数(判断是否有数据):判断SQL语句执行完毕后返回值内是否有数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var GetData
GetData = msg.payload
 
if(GetData.length >=1)  //数组长度为大于等于1,表示有数据返回,否则判定为返回空,不执行后面步骤
{
     msg.payload = GetData
     return [msg,null];
}
else
{
    msg.payload = "NoOrder"
    return [null,msg];
}

Function函数(写入FB已完成生产表):用于将读取回来的正在生产表中数据写入到已完成生产表中。RBEXE的更换数据库表名称即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr1,SQLStr2  //定义SQL语句
var SQLData   //定义数组获取接受到的数据
var taskIDStr
taskIDStr= msg.payload[0].taskID;
 
SQLStr1 = "select '"+ getCurrentDate(2) + "',taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime, 'Finished' from FBExecutingOrder where taskID = '" + taskIDStr + "'"
SQLStr2 = "insert into FBExecutedOrder(RecordTime,taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime,OrderStatus) " + SQLStr1
 
//调用getCurrentDate(1) 会返回当前日期  格式 2020-01-01
//调用getCurrentDate(2) 会返回当前日期时间 格式 2020-01-01 01:01:01
function getCurrentDate(format) //获取当前日期时间函数
{
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth();//得到月份
      var date = now.getDate();//得到日期
      var day = now.getDay();//得到周几
      var hour = now.getHours();//得到小时
      var minu = now.getMinutes();//得到分钟
      var sec = now.getSeconds();//得到秒
      month = month + 1;
      if (month < 10) month = "0" + month;
      if (date < 10) date = "0" + date;
      if (hour < 10) hour = "0" + hour;
      if (minu < 10) minu = "0" + minu;
      if (sec < 10) sec = "0" + sec;
      var time = "";
      //精确到天
      if(format==1){
        time = year + "-" + month + "-" + date;
      }
      //精确到分
      else if(format==2){
        time = year + "-" + month + "-" + date+ " " + hour + ":" + minu + ":" + sec;
      }
      return time;
}
msg.payload = SQLStr2
return msg

change设定(设定SQL语句):设定SQL语句到下一节点的topic属性。

Mysql节点,用于连接MYSQL数据库和执行SQL语句

Delay延时(延迟1秒):从正在生产表中读取数据1秒后,将该数据从正在生产表中删除。

Function(清空FB正在生产表):组合SQL语句,清空正在生产表。

以下部分为PLC请求数据功能节点:

Delay延迟(延迟3秒):从获取到PLC请求信号,到判断当前数据库连接正常后延迟3秒,再将数据库内数据写入到PLC中(为了避免此过程中与正在生产表的操作发生冲突)。

Function函数(获取未生产表FB数据):组合SQL语句,用于从未生产表中查询是否还有未生产的FB数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr1,SQLStr2  //定义SQL语句
SQLStr1 = "select taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime from unExecutedOrder where category = 'FB' order by ID limit 1"
//查询未生产订单表里面是否还有数据
//调用getCurrentDate(1) 会返回当前日期  格式 2020-01-01
//调用getCurrentDate(2) 会返回当前日期时间 格式 2020-01-01 01:01:01
function getCurrentDate(format) //获取当前日期时间函数
{
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth();//得到月份
      var date = now.getDate();//得到日期
      var day = now.getDay();//得到周几
      var hour = now.getHours();//得到小时
      var minu = now.getMinutes();//得到分钟
      var sec = now.getSeconds();//得到秒
      month = month + 1;
      if (month < 10) month = "0" + month;
      if (date < 10) date = "0" + date;
      if (hour < 10) hour = "0" + hour;
      if (minu < 10) minu = "0" + minu;
      if (sec < 10) sec = "0" + sec;
      var time = "";
      //精确到天
      if(format==1){
        time = year + "-" + month + "-" + date;
      }
      //精确到分
      else if(format==2){
        time = year + "-" + month + "-" + date+ " " + hour + ":" + minu + ":" + sec;
      }
      return time;
}
msg.payload = SQLStr1
return msg;

change设定(设定SQL语句):设定SQL语句到下一节点的topic属性。

Mysql节点,用于连接MYSQL数据库和执行SQL语句

Function函数(判断是否为空):判断读取回来的未生产表中FB数据是否为空,如果为空,就给PLC写一个信息。如果不为空,就执行下一步。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var GetData
GetData = msg.payload
 
if(GetData.length >=1)  //数组长度为大于等于1,表示有数据返回,否则判定为返回空,不执行后面步骤
{
     msg.payload = GetData
     return [msg,null];
}
else
{
    msg.payload = "NoOrder"
    return [null,msg];
}

Function函数(按顺序获取未生产的订单):组合SQL语句,按顺序读取未生产表中FB订单数据。RBEXE同理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr1,SQLStr2  //定义SQL语句
var taskIDData   //定义数组获取接受到的数据
var OrderNum //定义变量,记录获取到数组元素个数
var SQLValueData1,SQLValueData2,SQLValueData3;  //定义SQL语句内Value个数,即插入多行数据
taskIDData= msg.payload[0].taskID;
 
SQLStr1 = "select taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime from UnexecutedOrder where taskID = '" + taskIDData + "'"
 
msg.payload = SQLStr1
return msg;

change设定(设定SQL语句):设定SQL语句到下一节点的topic属性。

Mysql节点,用于连接MYSQL数据库和执行SQL语句。

Function函数(写入正在生产表):组合SQL语句,将从未生产表中读取到的FB数据写入到正在生产表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr1,SQLStr2  //定义SQL语句
var SQLData   //定义数组获取接受到的数据
var taskIDStr
taskIDStr= msg.payload[0].taskID;
 
    
SQLStr1 = "select '"+ getCurrentDate(2) + "',taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime, 'executing' from UnExecutedOrder where taskID = '" + taskIDStr + "'"
SQLStr2 = "insert into FBExecutingOrder(RecordTime,taskID,SerialNo,Category,PartNo,SeqOrderNo,SeqOrderSn,AssemblyLine,CustPartNo,PublishTime,ExpectedArrivalTime,RackNo,FlexTime,OrderStatus) " + SQLStr1
msg.payload = SQLStr2
return msg
 
 
//调用getCurrentDate(1) 会返回当前日期  格式 2020-01-01
//调用getCurrentDate(2) 会返回当前日期时间 格式 2020-01-01 01:01:01
function getCurrentDate(format) //获取当前日期时间函数
{
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth();//得到月份
      var date = now.getDate();//得到日期
      var day = now.getDay();//得到周几
      var hour = now.getHours();//得到小时
      var minu = now.getMinutes();//得到分钟
      var sec = now.getSeconds();//得到秒
      month = month + 1;
      if (month < 10) month = "0" + month;
      if (date < 10) date = "0" + date;
      if (hour < 10) hour = "0" + hour;
      if (minu < 10) minu = "0" + minu;
      if (sec < 10) sec = "0" + sec;
      var time = "";
      //精确到天
      if(format==1){
        time = year + "-" + month + "-" + date;
      }
      //精确到分
      else if(format==2){
        time = year + "-" + month + "-" + date+ " " + hour + ":" + minu + ":" + sec;
      }
      return time;
}

Function函数(从原表删除):组合SQL语句,用于将已经读取到的FB数据从未生产表中删除。该节点中的SQL语句延时5秒后传输给mysql执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr1,SQLStr2  //定义SQL语句
var taskIDData   //定义数组获取接受到的数据
var OrderNum //定义变量,记录获取到数组元素个数
var SQLValueData1,SQLValueData2,SQLValueData3;  //定义SQL语句内Value个数,即插入多行数据
taskIDData= msg.payload[0].taskID;
SQLStr1 = "where taskID = '" + taskIDData + "'"
SQLStr2 = "delete from UnexecutedOrder " + SQLStr1
msg.payload = SQLStr2
return msg;

function函数(FB写入到PLC):将从未生产表中读取回来的FB数据与PLC变量中相应变量地址组合起来,以两个数组方式传输给下一节点。

变量地址和变量数据对应关系为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var GetData
var k
var ObjWrite = new Object() //创建新对象
var arryAddr = new Array()  //创建新数组—存放地址
var arryData = new Array()  //创建新数组—存放数据
 
for(let j1=1;j1<11;j1++)  //for循环,控制创建地址数组内元素
{
    arryAddr[j1-1] = String("FBSerialNo" + j1); //string为强制转换为字符串函数
}
 
for(let j3=11;j3<21;j3++)  //for循环,控制创建地址数组内元素
{
    arryAddr[j3-1] = String("FBSeqOrderNo" + Number(j3-10));//number函数将字符串转换为数字
}
for(let j4=21;j4<31;j4++)  //for循环,控制创建地址数组内元素
{
    arryAddr[j4-1] = String("FBCustPartNo" + Number(j4-20));
}
for(let j5=31;j5<41;j5++)  //for循环,控制创建地址数组内元素
{
    arryAddr[j5-1] = String("FBRackNo" + Number(j5-30));
}
for(let j6=41;j6<51;j6++)  //for循环,控制创建地址数组内元素
{
    arryAddr[j6-1] = String("FBFlexTime" + Number(j6-40));
}
GetData = msg.payload
for(let m=0;m<50;m++)  //for循环,数据数组默认清空后在写数据
{
    arryData[m] = String(" ");
}
for(let k=0;k<getdata.length;k++)< span="">
{
        arryData[k]    = String(GetData[k].SerialNo);  //此处为举例
        arryData[k+10] = String(GetData[k].SeqOrderNo)
        arryData[k+20] = String(GetData[k].CustPartNo)
        arryData[k+30] = String(GetData[k].RackNo)
        arryData[k+40] = String(GetData[k].FlexTime)
}
ObjWrite.variable = arryAddr;//给地址对象赋值
ObjWrite.payload =arryData; //给数据对象赋值
msg.payload = ObjWrite  //将对象传递给函数节点输出
return msg;

change设定(设定地址):用于将上一节点传输过来的PLC地址数据和数据数组分别设定到协议节点的variable(地址)属性和payload(数据)属性上。实现多个变量值同时写入。

S7-out(PLCWrite):西门子PLC变量写入节点,此处实现多个变量值批量写入功能。

以下为辅助节点,未生产表无数据输出和数据库触发变量复位。

Function函数(订单数据库无数据):当从未生产表中查询返回的数据中没有FB数据时,前面节点会返回NoOrder字符串,此时输出一个信号给PLC内变量。该变量在数据库有数据时会被复位。

Function函数(订单数据库有数据):将复位信号发送给PLC。

以下为复位数据库触发变量

Function函数(复位动作标签):给PLC对应变量发送一个复位信号。

PLC请求事件记录

此处功能为记录PLC对数据库的请求记录,将PLC何时发送触发标签到边缘计算模块,模块何时将数据返回给PLC,做记录以备后面查询。所用达到的节点为函数节点和PLC连接节点,RBEXE和FB请求类似,此处不再赘述。

Function函数(PLC请求记录)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr //定义SQL语句
 
//记录请求事件时间
SQLStr = "insert into plcrequestevent(RequestTime,Category) Values ('"  + getCurrentDate(2) + "' , 'RBEXE')"
 
//调用getCurrentDate(1) 会返回当前日期  格式 2020-01-01
//调用getCurrentDate(2) 会返回当前日期时间 格式 2020-01-01 01:01:01
function getCurrentDate(format) //获取当前日期时间函数
{
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth();//得到月份
      var date = now.getDate();//得到日期
      var day = now.getDay();//得到周几
      var hour = now.getHours();//得到小时
      var minu = now.getMinutes();//得到分钟
      var sec = now.getSeconds();//得到秒
      month = month + 1;
      if (month < 10) month = "0" + month;
      if (date < 10) date = "0" + date;
      if (hour < 10) hour = "0" + hour;
      if (minu < 10) minu = "0" + minu;
      if (sec < 10) sec = "0" + sec;
      var time = "";
      //精确到天
      if(format==1){
        time = year + "-" + month + "-" + date;
      }
      //精确到分
      else if(format==2){
        time = year + "-" + month + "-" + date+ " " + hour + ":" + minu + ":" + sec;
      }
      return time;
}
msg.payload = SQLStr
return msg;

PLC响应事件记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var SQLStr //定义SQL语句
var GetData = msg.payload
if(GetData == 1)  //表示返回空数据,已经没有数据了
{
    SQLStr = "update plcrequestEvent set ResponseTime = '" + getCurrentDate(2) + "',ResponseStatus = '" + "Nodata" + "'  where ID = (select  ID from (select  ID from plcrequestevent  where Category = 'FB' order by ID desc limit 1 ) as a )"
}
else
{
   SQLStr = "update plcrequestEvent set ResponseTime = '" + getCurrentDate(2) + "',ResponseStatus = '" + "Good" + "'  where ID = (select  ID from (select  ID from plcrequestevent  where Category = 'FB' order by ID desc limit 1 ) as a )"
}
 
//调用getCurrentDate(1) 会返回当前日期  格式 2020-01-01
//调用getCurrentDate(2) 会返回当前日期时间 格式 2020-01-01 01:01:01
function getCurrentDate(format) //获取当前日期时间函数
{
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth();//得到月份
      var date = now.getDate();//得到日期
      var day = now.getDay();//得到周几
      var hour = now.getHours();//得到小时
      var minu = now.getMinutes();//得到分钟
      var sec = now.getSeconds();//得到秒
      month = month + 1;
      if (month < 10) month = "0" + month;
      if (date < 10) date = "0" + date;
      if (hour < 10) hour = "0" + hour;
      if (minu < 10) minu = "0" + minu;
      if (sec < 10) sec = "0" + sec;
      var time = "";
      //精确到天
      if(format==1){
        time = year + "-" + month + "-" + date;
      }
      //精确到分
      else if(format==2){
        time = year + "-" + month + "-" + date+ " " + hour + ":" + minu + ":" + sec;
      }
      return time;
}
msg.payload = SQLStr
return msg;

至此,用户需要的功能实现完毕。当然,除此之外,北京伟联科技有限公司发布的边缘计算模块功能还有以下这些:

李大拿家的王小拿

2022年8月

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 剑指工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
当MES遇上PLC——SOAP篇(上)(含调试程序)
前段时间,有客户在网上看到了我们边缘计算模块产品,找到了我们,跟我们描述了他们目前遇到的问题:
剑指工控
2022/11/14
1.8K0
当MES遇上PLC——SOAP篇(上)(含调试程序)
让PLC数据飞到数据库中
近年来。随着工业生产现场数据采集需求的增多,客户对于数据采集的方式也提出了多种要求。将PLC数据直接采集到数据库便是其中一种。
剑指工控
2022/03/11
2.7K0
让PLC数据飞到数据库中
还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了!
使用SQL语句计算年龄,在事务处理和日期计算中,较为常见。MySQL提供了许多日期函数,可以自由发挥。本文中看我们尝试
程序员小助手
2020/04/08
9.5K0
Mysql 中的日期时间函数汇总
MySQL中内置了大量的日期和时间函数,能够灵活、方便地处理日期和时间数据,本节就简单介绍一下MySQL中内置的日期和时间函数。
跟着飞哥学编程
2023/02/10
18.7K0
Mysql 中的日期时间函数汇总
MySQL操作命令大全
日期时间单位:year、month、week、day、hour、quarter、minute、second、microsecond 增加函数:date_add() 减少函数:date_sub()
程序员云帆哥
2022/05/12
6980
python获取日期加减之后的日期
python语言中的datetime模块可以利用其中的方法获取不同的日期,比如获取当前日期、明天、昨天、上个月、下个月和明年。下面利用几个实例说明这些日期的获取方法,操作如下:
周小董
2019/03/25
11.1K0
python获取日期加减之后的日期
SQL日期时间类型的函数(一)
CURRENT_DATE函数返回当前日期,CURRENT_TIME函数返回当前时间。语法如下:
堕落飞鸟
2023/05/10
1.2K0
轻松让PLC数据到MQTT
近几年,物联网领域mqtt协议以轻量级的优势风靡起来,众多物联网设备开始需要使用mqtt协议来相互沟通。但是,在工控领域,对mqtt协议的直接支持还寥寥无几。如果有用户想将PLC或仪表的数据通过mqtt直接传输至数据中心呢?
剑指工控
2022/03/11
1.1K0
轻松让PLC数据到MQTT
数据库之MySQL函数(二)
时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 5、转换时间戳的函数
小手冰凉
2020/04/26
13.2K0
数据库之MySQL函数(二)
MySQL 常用函数汇总
函数不能单独存在,需要与 select 等操作连用,否则会报错。 mysql> rand(); 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rand()' at line 1
Demo_Null
2020/09/28
2.3K0
java date当前时间_JAVA中获取当前系统时间
public static void main(String[] args) {
全栈程序员站长
2022/11/02
4.8K0
MySQL时间类分区写SQL的一些注意事项
对于分区表的检索无非有两种,一种是带分区键,另一种则不带分区键。一般来讲检索条件带分区键则执行速度快,不带分区键则执行速度变慢。这种结论适应于大多数场景,但不能以偏概全,要针对不同的分区表定义来写最合适的SQL语句。用分区表的目的是为了减少SQL语句检索时的记录数,如果没有达到预期效果,则分区表只能带来副作用。
bisal
2022/03/02
1.3K0
Java8时间方法LocalDate和LocalDateTime工具类
目的地-Destination
2023/10/12
4510
sql 时间总结
(本贴是从网上找了几个比较好的帖子总合了一下并做了一下修改) 下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。 日期部分 缩写  year yy, yyyy  quarter qq, q  Month mm, m  dayofyear dy, y  Day dd, d  Week wk, ww  Hour hh  minute mi, n  second ss, s  millisecond ms  SELECT DATEPART(dy, @DATE) AS DayOfY
lpxxn
2018/01/31
1.9K0
MySQL 日期函数大全(更新中.....)
解析:以年-月-日这种格式输出。%r代码am还是pm。am表示凌晨和上午,pm表示下午和晚上。(0:00-12:00)。
贵哥的编程之路
2022/11/16
4.1K0
MySQL 日期函数大全(更新中.....)
SQL日期时间类型的函数(二)
例如,以下SQL语句使用DATE_FORMAT函数将日期时间数据格式化为指定的格式:
堕落飞鸟
2023/05/10
8510
java中经常使用的日期格式化(全)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115600.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/10
2K0
【mysql】日期和时间函数
GET_FORMAT函数中date_type和format_type参数取值如下:
兮动人
2022/03/15
4.9K0
python时间序列之datetime模块
在上篇Python时间序列的文章中Peter详细介绍了time模块,本文中重点介绍的是datetime模块。这个模块可以说是time模块的升级版本,使用的情况更为普遍和常见,用法也更为全面。文章中会通过各种例子来讲解模块的使用
皮大大
2023/08/23
7980
MySQL函数大全及用法示例(三)
dayofweek(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准) mysql> select dayofweek('1998-02-03');   -> 3 weekday(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 mysql> select weekday('1997-10-04 22:23:00');   -> 5 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中的月份数值 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是一年的第几个季度 mysql> select quarter('98-04-01');   -> 2 week(date,first) 返回date是一年的第几周(first默认值0,first取值1表示周一是 周的开始,0从周日开始) mysql> select week('1998-02-20');   -> 7 mysql> select week('1998-02-20',0);   -> 7 mysql> select week('1998-02-20',1);   -> 8 year(date) 返回date的年份(范围在1000到9999) mysql> select year('98-02-03');   -> 1998 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并返回(p的格式yymm或yyyymm) mysql> select period_add(9801,2);   -> 199803 period_diff(p1,p2) 返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm) 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()的同义词,也 可以用运算符+和-而不是函数 date是一个datetime或date值,expr对date进行加减法的一个表 达式字符串type指明表达式expr应该如何被解释  [type值 含义 期望的expr格式]:  second 秒 seconds
哲洛不闹
2018/09/14
8800
相关推荐
当MES遇上PLC——SOAP篇(上)(含调试程序)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验