Java 如何在一列中使用两个AS运算符?

Java 如何在一列中使用两个AS运算符?,java,sql,jdbc,Java,Sql,Jdbc,我只想从datetime列中选择日期部分。我说: SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS [DD/MM/YYYY] FROM Intensity 它的工作很好。但是我在JDBC中使用这个查询: sql="SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS [DD/MM/YYYY] FROM Intensity"; ResultSet r=sta

我只想从datetime列中选择日期部分。我说:

SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS [DD/MM/YYYY]
FROM Intensity
它的工作很好。但是我在JDBC中使用这个查询:

sql="SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS [DD/MM/YYYY] FROM Intensity";
ResultSet r=sta.executeQuery(sql);
String json="";
json=json+"{'data':[";
while(r.next()){
    json=json+"'"+r.getDate("Date")+"',";
}
我得到的错误是:列名Date无效。
当我已经使用AS运算符时,可以重命名列,或者以更优化的形式重写此查询?

不是java程序员,但我怀疑您希望这样:

sql="SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS MyDate FROM Intensity";
ResultSet r=sta.executeQuery(sql);
String json="";
json=json+"{'data':[";
while(r.next()){
    json=json+"'"+r.getString("MyDate")+"',";
}

只是试一下。这可能是因为斜杠/。尝试将sql转换为:

sql="SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS [DD\/MM\/YYYY] FROM Intensity";


罗伯特·麦基(Robert McKee)和路易吉·门多兹(Luiggi Mendoze)通过评论给出了正确答案,并投票支持他们:

sql="SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS MyDate FROM Intensity";
ResultSet r=sta.executeQuery(sql);
String json="";
json=json+"{'data':[";
while(r.next()){
    json=json+"'"+r.getString("MyDate")+"',";
}

最后一种方法检索MyDate没有问题,但在数据更改的情况下,它也不会实现JSON格式,日期的格式也不会是所需的格式。AS子句不会格式化日期。它重命名该字段。convert上的103说明符告诉它日期的格式。103意味着将其转换为dd/mm/yyyy格式,因为英国人/法国人喜欢它。我知道,但由于您不是Java程序员,您可能不理解在将日期对象与字符串连接时会调用DatetoString,DatetoString有一个默认格式,可能不是所需的格式。啊,而且在那个时候它也不是一个真正的日期,因为它已经在服务器上被转换成一个字符串。所以他可能应该调用r.getStringMyDate或类似函数。OP应该使用SimpleDataFormat来处理这个问题。但正如您所说,您不是Java程序员,所以不知道这一点也不是您的错:。
sql="SELECT DISTINCT CONVERT(VARCHAR(10), Intensity.Date, 103) AS MyDate FROM Intensity";
ResultSet r=sta.executeQuery(sql);
String json="";
json=json+"{'data':[";
while(r.next()){
    json=json+"'"+r.getString("MyDate")+"',";
}