在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。
答案 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
之前。