SQL rand()依赖于另一列?

时间:2014-10-07 01:51:15

标签: sql random

我有一个格式如下的表格

id   cityname     user 
1    newyork        a
2    newyork        b
3    newyork        c
4    denver         d
5    colorodo       e
6    colorodo       e

我需要添加一个名称版本的新列,该列使用rand()随机生成,并且它应具有相似cityname的相同值

id   cityname      user    version
1    newyork        a    1111111.11
2    newyork        b    1111111.11
3    newyork        c    1111111.11
4    denver         d    7845156.12
5    colorodo       e    8765589.12
6    colorodo       e    8765589.12

如何实现类似的随机值。

请帮忙。

2 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server 2008或更高版本,则可以使用CHECKSUM功能。请记住,您可能会遇到4字节哈希冲突。

SELECT *, CHECKSUM(CityName) as Version
FROM Cities

对于不太可能发生碰撞的事情,您可以使用HASHBYTES

SELECT *, HASHBYTES('SHA1', CityName) as Version
FROM Cities

对于MySQL,您可以使用任何encryption functions,并获取子字符串:

SELECT *, LEFT(SHA1(CityName), 8) as Version
FROM Cities

或者,只需使用整个哈希来进行更重的碰撞保护。大多数其他RDBMS都有类似的哈希函数。

答案 1 :(得分:0)

正如@Mitch所提到的,你可以将它作为CHECKSUM 您可以将其设为计算列,以便在INSERTUPDATE上自动计算

ALTER TABLE tableA ADD version AS CHECKSUM(CityName)  PERSISTED