首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪花在插入时与MD5有问题吗?

雪花在插入时与MD5有问题吗?
EN

Stack Overflow用户
提问于 2019-10-14 15:45:38
回答 1查看 729关注 0票数 1

冒着我错过了一些显而易见的事情的风险.

我在表中插入一个记录,该表的字符串用于保存校验和值。

我试图插入以下记录:

插入control_table (field1,field2,field3,field4,CHECKSUM_FIELD)值(‘VALUE2 1’,‘VALUE2 2’,'VALUE3','VALUE4',MD5(‘VALUE1VALUE2VALUE3VALUE4’);

雪花不喜欢插入,告诉我:

SQL编译错误:值子句中的无效表达式MD5('VALUE1VALUE2VALUE3VALUE4')。

我不知道为什么不起作用,因为这句话很好用:

更新control_table SET CHECKSUM_FIELD = MD5('VALUE1VALUE2VALUE3VALUE4'),其中FIELD1 =‘VALUE1 1’;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-14 19:47:26

您的问题与INSERT语句中MD5函数的使用无关,而是一个事实,即值子句中的每个表达式必须是

  • 常数,或
  • 在编译SQL语句期间可作为常量计算的表达式。

雪花文档页记录了此行为。

您的插入可以重写如下:

代码语言:javascript
复制
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5($5) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4', 'VALUE1VALUE2VALUE3VALUE4');

由于您似乎希望传递给MD5()的值是其他4个表达式的连接,所以可以使用以下方法:

代码语言:javascript
复制
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5(CONCAT($1, $2, $3, $4)) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4');

但是,要注意这样简单的连接表达式,因为CONCAT(1,2,3,45)将产生与CONCAT(12,3,4,5)相同的结果。通常,您可能希望在表达式之间插入分隔符以避免此类问题。在这种情况下,这可能是一种更适当的办法:

代码语言:javascript
复制
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5(ARRAY_TO_STRING(ARRAY_CONSTRUCT($1, $2, $3, $4),':')) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58380088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档