2016-05-30 71 views
1

BigQuery中有這個版本嗎?BigQuery中的CHAR()或ASCII()函數?

基本上我需要一個BASE64字母並將其轉換爲一個數值(對於BASE64索引或ASCII碼 - 對我來說沒有區別)。

到目前爲止,我發明了2個選項: - 使用UDF - 與所有64個字母和索引聯接表。

但是這兩種解決方案對於任務看起來都有些複雜。有沒有更好的方法?

+0

你能炫耀你的'發明'嗎?所以它更清楚你想要達到的目標。也很高興看到你爲什麼需要這個 - 總有一種方法可以簡化事情! –

回答

3

另一種選擇,以字母轉換爲其ASCII與BigQuery:

SELECT 
    char, 
    INSTR('@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz', char) 
    + 63 AS ascii 
FROM 
    (SELECT 'A' AS char), 
    (SELECT 'H' AS char), 
    (SELECT 'a' AS char), 
    (SELECT 'h' AS char) 
+0

哇,這太棒了!非常感謝你!我試圖將「用戶」隨機分成兩組或更多組。用戶標識符是唯一的,但不是真正的隨機,所以我想先做SHA1(user_id),然後取第一個字母,轉換爲數字,並採取模2。當然可以使用HASH(),但我需要做同樣的一個不同的地方(和紅寶石),我不能得到同樣的CityHash結果那裏,也讀這裏一致性不能保證 - http://stackoverflow.com/questions/13861380/consistency-of-hash-function –

+0

很高興它幫助:o) –

0

BigQuery中的一個ASCII功能相當,但你需要從to_code_points()構造它:

select to_code_points(substr(x, 1, 1))[offset(0)] 

to_code_points將字符串的字符集值作爲數組返回。該構造採用字符串的第一個字符,獲取數組中的值,然後返回數組中的第一個值 - 瞧! ASCII()