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