Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format a number to have commas (1000000 -> 1,000,000)

In Bigquery: How do we format a number that will be part of the resultset to have it formatted with commas: like 1000000 to 1,000,000 ?

like image 750
Pratik Patil Avatar asked Sep 07 '16 00:09

Pratik Patil


People also ask

How do I format 1000000 to 1m in Excel?

In the Format Cells dialog box, on the Number tab, select Custom, then enter #,, “Million” where it says General. (Note: there is a space between the second comma and the double quotation mark.) The displayed value changes from 1000000 to 1 Million.

How do you show 1000000 as 1000 in Excel?

Select the cells which you want to display in thousands. Open the format cell dialogue by pressing Ctrl + 1 or right-click on the cell and select “Format Cells”. On the “Number” tab, click on “Custom” on the left hand side. For “Type” write: #,##0,;-#,##0, and confirm with OK.

How do you put a comma in a million?

Fortunately, large numbers in Excel can be formatted so they can be shown in “Thousands” or “Millions”. By using the Format Cells dialogue box shortcuts CTRL+1, you will need to select CUSTOM and then enter one comma to show Thousands or two commas to show Millions.

How do you create a comma separator in Excel in millions?

Click File > Options. On the Advanced tab, under Editing options, clear the Use system separators check box. Type new separators in the Decimal separator and Thousands separator boxes. Tip: When you want to use the system separators again, select the Use system separators check box.


1 Answers

below is for Standard SQL

SELECT 
  input,
  FORMAT("%'d", input) as formatted
FROM (
  SELECT 123 AS input UNION ALL 
  SELECT 1234 AS input UNION ALL
  SELECT 12345 AS input UNION ALL
  SELECT 123456 AS input UNION ALL
  SELECT 1234567 AS input UNION ALL
  SELECT 12345678 AS input UNION ALL
  SELECT 123456789 AS input
)

Works great for integers, but if you will need floats too, you can use :

SELECT 
  input,
  CONCAT(FORMAT("%'d", CAST(input AS int64)), 
         SUBSTR(FORMAT("%.2f", CAST(input AS float64)), -3)) as formatted
FROM (
  SELECT 123 AS input UNION ALL 
  SELECT 1234 AS input UNION ALL
  SELECT 12345 AS input UNION ALL
  SELECT 123456.1 AS input UNION ALL
  SELECT 1234567.12 AS input UNION ALL
  SELECT 12345678.123 AS input UNION ALL
  SELECT 123456789.1234 AS input
)

added for Legacy SQL

Btw, if for whatever reason you are bound to Legacy SQL - below is quick example for it

SELECT input, formatted
FROM JS((
  SELECT input
  FROM 
    (SELECT 123 AS input ),
    (SELECT 1234 AS input ),
    (SELECT 12345 AS input ),
    (SELECT 123456 AS input ),
    (SELECT 1234567 AS input ),
    (SELECT 12345678 AS input ),
    (SELECT 123456789 AS input)
  ),
  // input
  input,
  // output
  "[
  {name: 'input', type:'integer'},
  {name: 'formatted', type:'string'}
  ]",
  // function
  "function (r, emit) {
    emit({
      input: r.input,
      formatted: r.input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') 
    });
  }"
)

Above example uses in-line versin of Legacy SQL User-Defined Functions which is usually used for quick demo/example - but not recommended in production - if you will find it useful for you - you will need to "very slightly" transform it - see https://cloud.google.com/bigquery/user-defined-functions#webui for example

like image 131
Mikhail Berlyant Avatar answered Sep 22 '22 12:09

Mikhail Berlyant