选择数据时如何右对齐列?

时间:2014-10-23 00:01:30

标签: mysql sql

我正在处理的学校作业说将小数(14,0)列格式化为货币[US $ xxx,xxx]并且右对齐[所有逗号垂直排列]。“

我可以使用以下格式选择正确格式的数据:

CONCAT("US$", FORMAT(theColumn, 0))

但数据不合理。我一直在搜索和搜索,根本无法找到任何正确的输出方法。

我确实在这里找到了一个答案,它显示了如果列是字符串类型且具有固定宽度的方法,但是我找不到一种方法来右对齐十进制数据类型的输出。有可能吗?

编辑:

MySQL返回左对齐的数据,如下所示:

US$18,100,000,000
US$130,100,000,000
US$1,200,000,000

我想选择正确的方式,如下:

 US$18,100,000,000
US$130,100,000,000
  US$1,200,000,000

3 个答案:

答案 0 :(得分:20)

我想你想要

select lpad(column_name,x,' ') from table_name;

其中x是您想要填充的值的位数(例如8个位置)

答案 1 :(得分:5)

我会做的:

 $.ajax({
    type: "POST",
    url: "page.php",
    data: datastring,
    cache: false,
    dataType: "text",
    success:  function(data)
    {
        if (data.indexOf("Error") > -1) {
              $("label[for='withold']").hasClass( ".error" ).text(data);
        } else {}
       }
        });  // end $.ajax

这样做会在20个字符的列中显示输出,在值的左侧填充''。

答案 2 :(得分:-9)

我认为以下查询是您问题的答案。 由于用分隔符表示的DECIMAL(14,0)类型的最大长度为18,因此您必须在每个连接结果前面找出需要添加多少空格。我计算数字的位数,然后是逗号的数量((数字-1的长度)DIV 3),最后是要添加的空格数(18 - numberlength - separatorslength)。希望我没有遗漏一些东西。

SELECT column_name,
CONCAT("US$", FORMAT(column_name, 0)) as authorstry,
CHAR_LENGTH(CAST(FORMAT(column_name, 0) AS CHAR(18))) AS stringlength,
CHAR_LENGTH(column_name) as numofdigits, 
((CHAR_LENGTH(column_name)-1) DIV 3) as numofseparators,
(18-(CHAR_LENGTH(column_name))-((CHAR_LENGTH(column_name)-1) DIV 3)) as spacestobeadded
CONCAT(SPACE(18-(CHAR_LENGTH(column_name))-((CHAR_LENGTH(column_name)-1) DIV 3)) ,"US$",FORMAT(column_name, 0)) as finalresutl  
 FROM table;