先说下需求,是在SecureCRT调用VBS脚本实现自动化功能时,里面有一个SQL调用语句,该SQL有一个基于日期条件的查询,这个日期由于不是当天而是前天,所以需要通过VBS脚本将日期先格式化成对应的时间格式,并转化为想要的格式,再通过变量的形式转化使用。
1、VBS时间格式化
VBS取时间有函数date(),如果需要取三天前的日期可以通过如下代码实现:
<br />
Dim tday
tday = dateadd("d",-3,date)
而输出的时间格式可能不能满足具体的需求,因为这个输出的是YYYY/MM/DD的格式,这个时候就需要格式化为所需的格式,比如这里我想格式化为YYYYMMDD的格式。VBS实现格式化的一个函数写法如下:
<br />
Function FormateDateTime(sendTime,Para)
select case Para
Rem YYYYMMDDHHmmss
case "1"
sendTime = year(sendTime) & right( "00" & month(sendTime),2) & right( "00" & day(sendTime),2) & right( "00 " & hour(sendTime),2) & right( "00 " & minute(sendTime),2) & right( "00 " & second(sendTime),2)
Rem YYYYMMDD
case "2"
sendTime = year(sendTime) & right( "00" & month(sendTime),2) & right( "00" & day(sendTime),2)
Rem YYYY-MM-DD
case "3"
sendTime = year(sendTime) & "-"& right( "00" & month(sendTime),2) & "-"& right( "00" & day(sendTime),2)
Rem YYYY年MM月DD日
case "4"
sendTime = year(sendTime) & "年"& right( "00 " & month(sendTime),2) & "月"& right( "00" & day(sendTime),2)& "日 "
Rem YYYY-MM-DD HH:mm:ss
case "5"
sendTime = year(sendTime) & "-"& right( "00 " & month(sendTime),2) & "-"& right( "00" & day(sendTime),2) & " "& right( "00 " & hour(sendTime),2) & ": "& right( "00 " & minute(sendTime),2) & ": "& right( "00 " & second(sendTime),2)
end select
FormateDateTime = SendTime
end Function
MsgBox FormateDateTime(date(), "3")
这里实现的FormateDateTime函数可以实现如下几种格式的时间格式化:
<br />
YYYYMMDDHHmmss
YYYYMMDD
YYYY-MM-DD
YYYY年MM月DD日
YYYY-MM-DD HH:mm:ss
2、SQL中的调用
可以看出上面case 2就是我们需求的格式,所以具体SQL调用转换前的变量为:
<br />
Dim tday
tday = dateadd("d",-3,date)
tday = year(tday ) & right( "00" & month(tday ),2) & right( "00" & day(tday ),2)
对应的SecureCRT里的调用格式为:
<br />
crt.Screen.Send "select * from history where date > '"& tday & "' ;" & chr(13)
<br />