Google Apps脚本,JDBC和MySQL不适用于Date 0000-00-00

时间:2015-11-07 12:55:46

标签: mysql date datetime jdbc google-apps-script

我正在尝试使用Google Apps脚本中的这个简单代码读取MySQL数据库记录:

function testConn(){

  // make the connection
  var connection = Jdbc.getConnection("jdbc:mysql://" + DB.URL + ":" + DB.PORT + "/" + DB.DATABASE, DB.USERNAME, DB.PASSWORD);

  // perform the query
  var SQLstatement = connection.createStatement();
  var result = SQLstatement.executeQuery("SELECT date_available FROM oc_product where model = 'B23-U57-U57'");
  var colNum = result.getMetaData().getColumnCount();

  while(result.next()) {
    var res = {};
    for (var i=1; i<= colNum; i++) {
      var label = result.getMetaData().getColumnLabel(i);
      if (result.getMetaData().getColumnTypeName(i) == "DATE") {
        var val = result.getDate(i);
      } else {
        var val = result.getString(i);
      }
      res[label] = (val);
    }    
    Logger.log(JSON.stringify(res, null, 4));
  }
}

因为date_available是“0000-00-00”,所以此代码会抛出错误

  

值'0000-00-00'不能表示为

根据建议here我尝试使用带参数

的连接网址
?zeroDateTimeBehavior=convertToNull

但那也引发了错误

  

不支持以下连接属性:zeroDateTimeBehavior。

我错过了什么?这是Google的错误吗?为什么不支持此连接属性?有没有改变SQL查询的解决方法?

2 个答案:

答案 0 :(得分:0)

不幸的是,不是没有改变SQL。但是作为参考,这是改变SQL的方式:

我已使用此建议:How to convert timestamp to datetime in MySQL?。并在MySql中使用FROM_UNIXTIME()函数。唯一的缺点是,电子表格中的导入日期为1970-01-01 00:00:00.0对我而言,这对我来说不是问题。

示例:

var rs = stmt.executeQuery("SELECT `Subscriptions`.`SubscriptionId`,
  `Subscriptions`.`ItemId`, `Subscriptions`.`AccountId`,
  `Subscriptions`.`ContactId`,
  from_unixtime( unix_timestamp(TIMESTAMP( `Subscriptions`.`DateStart` ) ) ),
  from_unixtime( unix_timestamp(TIMESTAMP( `Subscriptions`.`DateEnd` ) ) ),
  `Subscriptions`.`AutoRenewal`,`Subscriptions`.`Invoice` from `Subscriptions`")

答案 1 :(得分:0)

我通过两次传递日期来解决这个问题,一旦转换为秒,然后是实际日期值:

"SELECT TO_SECONDS(date_available), date_available FROM oc_product where model = 'B23-U57-U57'"

接下来,检查零日期,不在结果过程中包含它:

var val;
var da = results.getDouble(1);  
if(da === 0) val = null;
else var = new Date(results.getString(2));