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



我正在做的一份学校作业说,要将十进制(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

我想你想要

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

其中x是您想要填充的值的位数(比如说8位)

我会做的:

LPAD(CONCAT("US$", FORMAT(theColumn, 0)),20,' ')

这样做的目的是将输出显示在一列20个字符中,在值的左侧填充"。

另一种方法是:

RIGHT(CONCAT("              US$", theColumn), 17)

基本上,在您的_field前面加上足够的空格来填充显示列,然后从中提取最多的字符。因此,如果你的显示列是17个字符,那么在你的_字段前面加上(至少)17个空格/";美元";然后取该字符串中最右边的17个字符。17是14,0加上"0"中的3个字符;美元";。

不,我也不喜欢,尤其是在这个时代,但它确实有效。我想DB引擎没有复杂的东西来做这件事,这就是DB是";型号";而不是";查看";。

使用带有div右对齐的CONCAT。示例:

CONCAT("<div style='text-align:right',(FORMAT(theColumn, 0))

这是使用MySQL。

我认为下面的查询就是您问题的答案。由于用分隔符表示的DECIMAL(14,0)类型的最大长度是18,因此您必须找出需要在每个连接的结果前面添加多少空格。我计算了数字的位数,然后是逗号的数量((数字的长度-1)DIV3),最后是要添加的空格的数量(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;

最新更新