oracle中连接列的MAX如何工作?

时间:2015-05-04 13:36:12

标签: oracle max concat

在Oracle中,在尝试连接两个Number类型的两列然后尝试使用它的MAX时,我有一个问题。 即列数字数据类型的列B,

Select MAX(A||B) from table

表格数据

A           B
20150501    95906
20150501    161938

当我从表

运行查询Select MAX(A||B)

O / P - 2015050195906

理想情况下20150501161938应该是输出????

我正在尝试将列B格式化为TO_CHAR(B,' FM000000')并执行我获得预期输出。

Select MAX(A || TO_CHAR(B,'FM000000')) FROM table

O / P - 2015011161938

为什么2015050195906在第一种情况下被视为MAX。

3 个答案:

答案 0 :(得分:1)

您应该转换为数字;

jQuery("#plus, #minus").click(function(event){
    event.preventDefault();
    //Your code
});

答案 1 :(得分:1)

据推测,A列是日期,B列是时间。

如果这是真的,请将其视为:

select max(to_date(to_char(a)||to_char(b,'FM000000'),'YYYYMMDDHH24MISS')) from your_table;

那将为时间组件添加一个前导空格(如果需要)然后将列连接成一个字符串,然后传递给to_date函数,然后max函数将被视为DATE数据类型,这可能是什么你想要的。

希望有所帮助。

PS这里的真正解决方案是修复您的数据模型。不要将日期和时间存储为数字。除了这样的排序问题之外,优化器可能会感到困惑。 (如果您将日期存储为数字,优化程序如何知道' 20141231'将立即跟随' 20150101'?)

答案 2 :(得分:0)

连接将导致字符/文本输出。因此,它按字母顺序排序,因此9后会显示16

在第二种情况下,您指定的格式将数字填充为六位数。这很有效,因为095906现在会出现在161938之前。