#legacySQL
SELECT CONCAT(
RTRIM(CONCAT(LEFT(lat_temp, lat_pos - 1), '.', SUBSTR(lat_temp, lat_pos)), '0'),
';',
RTRIM(CONCAT(LEFT(lon_temp, lon_pos - 1), '.', SUBSTR(lon_temp, lon_pos)), '0')
) AS lat_lon
FROM (
SELECT
INSTR(STRING(lat * 1000000), '.') - 6 AS lat_pos,
REPLACE(STRING(lat * 1000000),'.', '') AS lat_temp,
INSTR(STRING(lon * 1000000), '.') - 6 AS lon_pos,
REPLACE(STRING(lon * 1000000),'.', '') AS lon_temp
FROM
(SELECT 34.052235 AS lat, -118.243683 AS lon) AS yourTable
)
看起来很丑陋,但正如你所说 - 由于某种原因你要坚持wirg传统的SQL
否则请参阅下面的标准SQL版本
#standardSQL
WITH yourTable AS (
SELECT 34.052235 AS lat, -118.243683 AS lon
)
SELECT CONCAT(CAST(lat AS STRING),";", CAST(lon AS STRING)) AS lat_lon
FROM yourTable
另(较小丑陋的)版本对于Legacy SQL使用的是JS UDF
#legacySQL
SELECT lat, lon, lat_lon
FROM (JS(
-- input table
(
SELECT lat, lon FROM
(SELECT 34.052235 AS lat, -118.243683 AS lon) AS yourTable
),
-- input vars
lat, lon,
-- output schema
"[
{name: 'lat_lon', type: 'STRING'},
{name: 'lat', type: 'FLOAT'},
{name: 'lon', type: 'FLOAT'}
]",
-- the function
"function(row, emit) {
emit({
lat_lon: row.lat.toString().concat(';').concat(row.lon.toString()),
lat: row.lat,
lon: row.lon
})
}"
))
最后,如果碰巧 - 你将决定迁移到Standard SQL,使用FORMAT使生活变得更加容易(感谢艾略特的评论此)
#standardSQL
SELECT FORMAT('%t;%t', lat, lon) AS lat_lon
FROM
(SELECT 34.052235 AS lat, -118.243683 AS lon) AS yourTable
恰好例如完全在标准SQL!没有任何舍入。什么让你与传统的SQL? –