PostgreSQL 使用SQL字母转换数字格式

在搭建数仓的过程中,出现源数据ID格式为UUID。必须保留原值,而且目标表格式为numeric且不能修改。

字母转换数字

所以需要想办法把字母转换成数字,从网上搜了一些方法,没有看到比较合适的。然后就考虑是否可以将字母转换成二进制再转换成十进制,变成数字格式。

首先考虑的是先把字符串转换进制,这里是先转换2进制,再转换成16进制。使用::bytea转换格式 为二进制,然后使用encode函数转换成16进制。当转换成16进制的时候,字母就可以显示成数字(强行转换十进制有时候会因为数字太长无法转换)。如下:

SELECT 'ef'::bytea
-- (BLOB) 2 bytes
SELECT encode('ef'::bytea, 'hex')
-- 6566

这里可以看出,转换二进制时是每个字符进行转换,e的16进制为0x65,f的16进制为0x66

汉字和特殊字符转换成数字

上面的用法中可以把字母转换成数字,但是如果字段中出现汉字和特殊字符,转换一次16进制后并不能变成数字。

这里就有不同的方式实现了,如果出现的汉字和特殊字符情况不多,可以把特殊数据单独处理,或者将特殊字符、汉字等替换成其他字母或空字符串。然后转换,这就需要看具体情况了。

如果不能替换,特殊情况太多,就只能再套一层处理,相对的字段值也会变的比较长,如下:

SELECT encode('--[/'::bytea, 'hex')
-- 2d2d5b2f
SELECT encode(encode('--[/'::bytea, 'hex')::bytea, 'hex')
-- 3264326435623266

这样就解决了字符串想要强行转换成数字的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇