当前位置: 首页 > 面试题库 >

如何对所有列进行md5而不管类型

都博裕
2023-03-14
问题内容

我想创建一个sql查询(或plpgsql),它将md5()所有给定的行与类型无关。但是,在下面,如果一个为空,则哈希为空:

UPDATE thetable 
    SET hash = md5(accountid || accounttype || createdby || editedby);

稍后,我将使用散列比较唯一性,因此空散列不适用于此用例。

问题在于它处理串联空值的方式。例如:

thedatabase=# SELECT accountid || accounttype || createdby  || editedby 
                 FROM thetable LIMIT 5;

1Type113225  
<NULL>
2Type11751222 
3Type10651010 
4Type10651

如果知道类型,则可以使用合并或CASE语句。但是,我有很多表,而且我不会提前知道每一列的类型。


问题答案:

为此,还有很多更优雅的解决方案。

在Postgres中,SELECT允许使用表名in ,其类型为ROW。如果将其强制转换为type
TEXT,则它会将所有列串联在一起,而这些字符串实际上是JSON。

有了这个,您可以获取md5所有列,如下所示:

SELECT md5(mytable::TEXT)
FROM mytable

如果只想使用某些列,请使用ROW构造函数并将其强制转换为TEXT

SELECT md5(ROW(col1, col2, col3)::TEXT)
FROM mytable

关于此解决方案的另一个不错的特性是,与空字符串相比,它md5会有所不同NULL

强制性SQLFiddle。



 类似资料:
  • 我对give all products有wp_查询请求,需要对这两个字段进行排序:按类别 在简单查询中: 在全局$product中,存在字段“菜单\订单”,但不存在字段“产品\目录”。 我可以用wp_query吗?或者也许存在另一种方法?

  • 我正在研究一个已经用MD5(没有salt)散列用户密码的系统。我想使用SHA-512和SALT更安全地存储密码。 虽然这对于将来的密码来说很容易实现,但我也想修改现有的MD5散列密码,最好不强迫所有用户更改他们的密码。我的想法是只使用SHA-512和一个适当的salt来散列现有的MD5散列。然后,我可以在数据库中设置一些标志,指示哪些密码是从纯文本散列出来的,哪些密码是从MD5散列出来的。或者我可

  • 本文向大家介绍浅谈如何通过node.js对数据进行MD5加密,包括了浅谈如何通过node.js对数据进行MD5加密的使用技巧和注意事项,需要的朋友参考一下 md5介绍:MD5是一种常用的哈希算法,主要用于对一些重要数据进行“签名”,当然这些数据可以是任意的。最终得到的“签名”通常都是一个16或32位的十六进制的字符串。 实际工作开发中,是不会有人直接将密码明文直接放到数据库当中的。因为这种做法是非

  • 问题内容: 我正在使用Elasticsearch 2.3,并且尝试使用管道聚合来执行两步计算。我只对管道聚合的最终结果感兴趣,但是Elasticsearch返回所有存储桶信息。 由于我有大量的存储桶(数以千万计),因此这是令人望而却步的。不幸的是,我找不到办法告诉Es不要返回所有这些信息。 这是一个玩具示例。我有一个带有文档类型的索引。有两个字段,和。 我想获得具有s 的s 的最小值的平均值(在所

  • 问题内容: 我知道我可以用来将字符串字段设置为 特定新索引中的新字段 。 有没有办法将此设置 全局 应用-即为任何新索引中的任何字符串字段设置属性?(无需为每个新索引设置它) 问题答案: 是的,你可以通过创建一个实现这个指标模板上有一个映射类型和动态模板 然后,您可以在任何新索引中创建任何文档,并且所有字符串字段都将为 如果检查新创建的映射类型,则将看到该字段为

  • 问题内容: 如果我有一个水果列表,其中包含各种实现,如,等。该列表是必需的,因为其他方法会对列表中的所有水果执行常规操作。 如何将特定类型的所有对象从列表中删除?例如所有的苹果?进行instanceof / if-else检查非常难看,尤其是在有许多不同的类时。 如何改善以下内容? 问题答案: 您应该知道-实例是不好的代码实践。 编写.getType()(返回的对象的枚举类型)怎么办?