Tee*_*eej 6 javascript regex sql emoji snowflake-cloud-data-platform
我有一个 1B 行的聊天消息表,其中有一个用于原始消息文本的最大大小的 VARCHAR 列。我如何 -
结合 Lukasz 和 Greg 分享的知识,再加上发现一个额外的隐藏角色,我可以提出这个解决方案:
\ncreate or replace function has_emoji(X text)\nreturns boolean\nlanguage javascript\nas $$\nreturn /\\p{Extended_Pictographic}/u.test(X);\n$$;\n\ncreate or replace function only_emoji(X text)\nreturns boolean\nlanguage javascript\nas $$\nreturn /^[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$/u.test(X);\n$$;\n
Run Code Online (Sandbox Code Playgroud)\n使用示例:
\nwith data as (\n select $1 t\n from values(\'\xe2\x9d\x84\xef\xb8\x8f\'),(\'\xe2\x9d\x84\xef\xb8\x8f is the data \xe2\x98\x81\xef\xb8\x8f\'),(\'no emoji\')\n)\n\nselect *, has_emoji(t), only_emoji(t)\nfrom data\n;\n
Run Code Online (Sandbox Code Playgroud)\n\n--
\n一些研究:
\n\'\xe2\x9d\x84\xef\xb8\x8f\'.replace(/\\p{Extended_Pictographic}/ug, \'\')
回报\'\'
\'\xe2\x9d\x84\xef\xb8\x8f\'.replace(/\\p{Extended_Pictographic}/ug, \'\')
不等于\'\'
Emoji_Component
使用 Snowflake 的JavaScript 用户定义函数:
CREATE OR REPLACE FUNCTION EMOJI_TEST (STR VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS $$
return (/\p{Emoji}/u.test(STR));
$$
;
Run Code Online (Sandbox Code Playgroud)
询问:
WITH cte(col) AS (
SELECT '' UNION ALL
SELECT 'text' UNION ALL
SELECT 'text '
)
SELECT col, EMOJI_TEST(col)
FROM cte
-- WHERE EMOJI_TEST(col)::BOOLEAN
Run Code Online (Sandbox Code Playgroud)
输出:
归档时间: |
|
查看次数: |
1368 次 |
最近记录: |